apk打包Absolute path are not supported when setting an output file name系列问题

问题1.首先,apk 打包过程中,应用包名app-release.apk或是app-debug.apk

我们都想改成自己的应用名,百度过后,设置如下:

    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true  // Zipalign优化
            shrinkResources true // 移除无用的resource文件,必须和minifyEnabled 一起使用
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // 打包后应用名称
            applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        def  fileName = "luoyBiJi_R${defaultConfig.versionName}.${getTime()}.apk"
                       output.outputFile = new File(outputFile.parent, fileName)
                    
                    }
                }
            }
        }
}

问题2.但是会报错 Absolute path are not supported when setting an output file name,这是版本更新的问题,

解决办法是outputFile.parent改成绝对路径

outputFileName = new File("../../../release/", fileName)

问题3.如此编译不报错了,但是生成的文件不对,没有apk

解决办法:直接点outputFileName = fileName

    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true  // Zipalign优化
            shrinkResources true // 移除无用的resource文件,必须和minifyEnabled 一起使用
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // 打包后应用名称
            applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        def  fileName = "luoyBiJi_R${defaultConfig.versionName}.${getTime()}.apk"
                      //output.outputFile = new File(outputFile.parent, fileName)
                       //outputFileName = new File("../../../release/", fileName)
                       
                        outputFileName = fileName
                    }
                }
            }
        }
}

生成结果:

问题4. app-debug.apk也改成特定的名字

解决办法:

    buildTypes {

        release {
            minifyEnabled true
            zipAlignEnabled true  // Zipalign优化
            shrinkResources true // 移除无用的resource文件,必须和minifyEnabled 一起使用
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // 打包后应用名称
            applicationVariants.all { variant ->
                            variant.outputs.all { output ->
                                def outputFile = output.outputFile
                                def  fileName
                                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                                    if ("release".equals(variant.buildType.name)) {
                                          fileName = "luoyBiJi_R${defaultConfig.versionName}.${getTime()}.apk"
                                        //output.outputFile = new File(outputFile.parent, fileName)
                                        //outputFileName = new File("../../../release/", fileName)
                                       // outputFileName = fileName
                                    } else if ("debug".equals(variant.buildType.name)) {
                                         fileName = "luoyBiJi_dubeg${defaultConfig.versionName}.${getTime()}.apk"
                                    }
                                    outputFileName = fileName
                                }
                }
            }
        }

        //这是系统默认的生成debug.apk的代码,我这边是提出来对比release的
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }

生成效果:

总结:多去试错,实际动手才能体会到真的知识和乐趣。

如果还有什么问题,欢迎加入我的Java与Android逆向开发交流QQ群,一起交流进步。

猜你喜欢

转载自blog.csdn.net/ly_xiamu/article/details/83181943