默认 Flutter flutter build apk, 是默认的名字 默认的路径,直接修改输出路径 会造成 打包可以,直接运行 会提示找不到 apk 文件;
这里的解决思路是:打包完成后 拷贝目标路径的 APK 到自定义的路径,这样既可以正常打包 也能解决 直接运行 还能输出到自定义路径 修改 APK名称
新建 gradle:
在和 build.gradle 同级目录下 新建 buildNext.gradle
核心代码:(有些我自己的变量用不着可以移除掉)
variant.assembleProvider.configure { def outputApkName = "${project.archivesBaseName}_${variant.versionName}_${variant.versionCode}${dartEne.APP_SUFFIX}.apk" def outputFileDir = "${project.rootDir.absolutePath}/buildOutApk/" it.doLast { // println("_______outputApkName:${outputApkName}") // println("_______outputFileDir:${outputFileDir}") variant.outputs.forEach { file -> copy { from file.outputFile into "${outputFileDir}" rename { String srcFileName -> "${outputFileDir}${outputApkName}" } } println("build path:${outputFileDir}${outputApkName}") } } }
完整代码:
project.archivesBaseName = "game" //获取命令行打包变量 之前的博客有提到 //地址 https://johns.blog.csdn.net/article/details/131007874 def dartEne = [ APP_NAME : project.hasProperty('APP_NAME') ? appName : '品创数娱', APP_SUFFIX: project.hasProperty('APP_SUFFIX') ? appName : '', ] if (project.hasProperty('dart-defines')) { dartEne = dartEne + project.property('dart-defines') .split(',') .collectEntries { entry -> // 1.22.6 版本 //def pair = URLDecoder.decode(entry).split('=') // 2.2 版本 def pair = new String(entry.decodeBase64(), 'UTF-8').split('=') [(pair.first()): pair.last()] } } android.applicationVariants.all { variant -> // variant.outputs.all { if (outputFileName.endsWith('.apk')) { //这里使用之前定义apk文件名称 // outputFileName = "${project.archivesBaseName}_v${variant.productFlavors[0].versionName}_${variant.productFlavors[0].versionCode}_${variant.productFlavors[0].name}_${releaseTime()}_${variant.buildType.name}.apk" //outputFileName = "${project.archivesBaseName}_${versionCode}_v${versionName}_${releaseTime()}_${name}.apk" def outputApkName = "${project.archivesBaseName}_${variant.versionName}.${variant.versionCode}${dartEne.APP_SUFFIX}.apk" println("__outputFileName:${outputApkName}") } // } variant.assembleProvider.configure { def outputApkName = "${project.archivesBaseName}_${variant.versionName}_${variant.versionCode}${dartEne.APP_SUFFIX}.apk" def outputFileDir = "${project.rootDir.absolutePath}/buildOutApk/" it.doLast { // println("_______outputApkName:${outputApkName}") // println("_______outputFileDir:${outputFileDir}") variant.outputs.forEach { file -> copy { from file.outputFile into "${outputFileDir}" rename { String srcFileName -> "${outputFileDir}${outputApkName}" } } println("build path:${outputFileDir}${outputApkName}") } } } }
编辑 gradle:
在原有 build.gradle 引入我们
buildNext.gradle
完成展示: