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

当你在构建一个AAR(Android Archive)文件时,如果遇到“Direct local .aar file dependencies are not supported when building an AAR”的错误信息,这通常意味着你的项目试图直接依赖本地的AAR文件。然而,AAR文件不支持直接引用本地的AAR文件作为依赖。 要解决这个问题,你可以考虑以下几种方法: ### 1. 使用Maven仓库 将你的AAR文件发布到一个Maven仓库中,然后在你的`build.gradle`文件中通过Maven坐标来引用它。例如: ```groovy repositories { mavenCentral() // 或者自定义的Maven仓库 maven { url 'https://your-custom-maven-repo' } } dependencies { implementation 'com.example:your-library:1.0.0' } ``` ### 2. 使用Flat Directory 如果你不想发布到远程仓库,可以使用本地的flat directory来存放AAR文件。首先,将你的AAR文件放到一个目录中,然后在`build.gradle`文件中配置该目录为一个仓库: ```groovy repositories { flatDir { dirs 'libs' } } dependencies { implementation(name: 'your-library', ext: 'aar') } ``` 确保你的AAR文件放在`libs`目录下。 ### 3. 使用本地模块 如果你有权限修改项目的源代码,可以将AAR文件转换为一个本地模块。具体步骤如下: 1. 创建一个新的模块,并将AAR文件解压到该模块的`libs`目录中。 2. 在模块的`build.gradle`文件中添加对AAR文件的依赖: ```groovy dependencies { implementation files('libs/your-library.aar') } ``` 3. 在你的主项目中引用这个新模块: ```groovy dependencies { implementation project(':your-module-name') } ``` ### 4. 使用JitPack 如果你的AAR文件托管在一个Git仓库中,你可以使用JitPack来发布和引用它。首先,将你的AAR文件推送到GitHub或其他支持JitPack的Git服务上。然后,在`build.gradle`文件中添加JitPack仓库并引用你的库: ```groovy repositories { maven { url 'https://jitpack.io' } } dependencies { implementation 'com.github.User:Repo:Tag' } ``` 替换`User`, `Repo`, 和 `Tag`为你的实际用户名、仓库名和版本标签。 通过以上方法之一,你应该能够解决“Direct local .aar file dependencies are not supported when building an AAR”的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值