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群,一起交流进步。

Direct local .aar file dependencies are not supported when building an AAR. 这个错误是由于使用直接引用本地的 .aar 文件时导致的。高版本的 Android Gradle Plugin 不再支持这种直接依赖方式,因为这样会破坏生成的 AAR 文件,导致其中的类和 Android 资源无法正确打包进 AAR 文件中。 为了解决这个问题,可以按照以下步骤进行操作: 1. 将 library 模块中的依赖方式改为 `compileOnly fileTree(…)`。具体代码如下: ``` compileOnly fileTree(include: ['*.jar', '*.aar'], dir: 'libs') ``` 2. 将主工程中的 AAR 依赖方式改为 `implementation fileTree(…)`。具体代码如下(示例): ``` implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') ``` 3. 将 library 模块中的 `libs` 目录下的 .aar 文件复制一份到主工程的 `libs` 目录下[2]。 然后重新编译项目,这样就可以解决这个问题了。这种解决方式可以在编译时让编译器通过而不报错,并且在打包后可以正常调用相关的程序。 总结起来,这个问题是由于环境版本变化所导致的。高版本的 Android Gradle Plugin 不再支持直接引用本地 .aar 文件的方式,因此我们需要通过上述的解决步骤来处理这个问题。这样做可以确保在生成 AAR 文件时不会破坏其中的类和 Android 资源,并且能够正常使用。 需要注意的是,高版本的 Android Studio 在创建新模块时可能没有 "Import .JAR/.AAR Package" 选项可用。 希望这个解答对你有帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值