我有一个不同风格的应用程序 - 每个风格都有两个buildTypes。
在我的清单中重命名一些行后,我也重命名了apk。一切正常 - 我只是想知道为什么我两次获得同样的答案?一旦没有重命名,一旦重命名......
具有不同名称的相同应用的简短示例:
以下是build.gradle文件的代码:
// *** OVERRIDE data in MANIFEST ***
android.applicationVariants.each { variant ->
variant.processManifest.doLast {
overrideDataInManifest(variant)
}
}
def overrideMapsKey(buildVariant){
def appName = getAppName(buildVariant)
// override line ... this is not necessary to this question
renameAPK(buildVariant, appName)
}
// *** RENAME APK ***
def renameAPK(buildVariant, appName){
def apk = buildVariant.packageApplication.outputFile;
def newName = "";
// get data for apk renaming
def versionName = android.defaultConfig.versionName
def versionNameSuffix = buildVariant.buildType.versionNameSuffix
if(versionNameSuffix.toString().equals("null"))
versionNameSuffix = ""
def buildTypeOfApp= buildVariant.buildType.name
if (buildVariant.zipAlign) {
newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + ".apk"
}else{
newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-ALIGNED" + ".apk"
}
buildVariant.packageApplication.outputFile = new File(apk.parentFile, newName);
}
只想了解最新情况,如果可以完成相同的任务而不需要两个apks。
答案 0 :(得分:11)
zipAlign选项设置为true时,将始终有两个APK文件用于变体。首先,gradle构建原始APK文件,然后对其进行zipalign并生成优化版本而不删除原始版本。
buildVariant.packageApplication.outputFile是构建过程的中间产品,在我的观察中,一个总是未对齐的APK文件。
buildVariant.outputFile是应用zipAlign选项的最终输出。
另一方面,您可能想要更正build.gradile文件,它实际上将APK文件的未对齐版本重命名为“ALIGNED”版本,并保持zipalign APK文件不变。这是我的修改版本:
if (buildVariant.zipAlign) {
newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-ALIGNED.apk"
buildVariant.outputFile = new File(apk.parentFile, newName);
}
newName = "etscanner-" + appName + "-" + buildTypeOfApp.toUpperCase() + "-v" + versionName + versionNameSuffix + "-UNALIGNED" + ".apk"
buildVariant.packageApplication.outputFile = new File(apk.parentFile, newName);
答案 1 :(得分:2)
对于任何搜索重命名Android库文件(aar)的人来说,这就是我为gradle 2. +版本提出的:
android.libraryVariants.all { variant ->
if (variant.buildType.name == 'release') {
def oldFile = variant.outputs.get(0).getOutputFile()
if (oldFile.name.contains("release")) {
def newPath = oldFile.name.replace("release.aar", version.toString() + ".aar")
variant.outputs.get(0).
setOutputFile(new File(oldFile.parentFile.toString(), newPath.toString()))
}
}
}
如果你想出一个更好的方法,请告诉我。
答案 2 :(得分:1)
"
答案 3 :(得分:0)
如果您使用的是Android Gradle Plugin 0.13或更高版本,则界面会发生一些变化:
android.applicationVariants.all { variant ->
def name
variant.outputs.each { output ->
def apkDirectory = variant.packageApplication.outputFile.parentFile
if (output.zipAlign) {
name = "yourAppName.apk"
output.outputFile = new File(apkDirectory, name);
}
name = "yourAppName-UNALIGNED.apk"
variant.packageApplication.outputFile = new File(apkDirectory, name);
}
}