在我的build.gradle
文件中,我有以下内容:
applicationVariants.all { variant ->
def oldFile;
if (variant.zipAlign) {
oldFile = variant.outputFile;
} else {
oldFile = variant.packageApplication.outputFile;
}
def newFile;
def newFileReplacement = "";
if (getVersionName().indexOf(gitSha()) != -1) {
newFileReplacement = newFileReplacement + "-" + getVersionName() + ".apk";
} else {
newFileReplacement = newFileReplacement + "-" + getVersionName() + "-" + gitSha() + ".apk"
}
newFile = oldFile.name.replace(".apk", newFileReplacement);
if (variant.zipAlign) {
variant.zipAlign.outputFile = new File(oldFile.parent, newFile);
} else {
variant.packageApplication.outputFile = new File(oldFile.parent, newFile);
}
}
当我运行以下命令:./gradlew clean assembleRelease
时,它会为我创建以下.apk文件:
MyApp-release-1.2.3-e1ad453.apk
MyApp-release-unaligned.apk
(MyApp-release-1.2.3-e1ad453.apk
是zipaligned,但另一个不是)
我想要创建它的是以下文件:
MyApp-release-1.2.3-e1ad453-unaligned.apk
MyApp-release-1.2.3-e1ad453.apk
MyApp-release-1.2.3-e1ad453-unaligned.apk
不是拉链对齐的,MyApp-release-1.2.3-e1ad453.apk
是拉链对齐的,因为这似乎是gradle默认操作的方式(即它添加到文件的名称不是#39} ; t对齐,而不是添加 的文件的名称。
基本上,似乎正在发生的事情是重命名功能在实际创建文件之前运行,并且只指定我想要的输出文件。这很好,但是也可以在zipAlign 运行之前指定我希望中间文件MyApp-release-unsigned.apk
为吗?
答案 0 :(得分:3)
我可以使用variant.packageApplication.outputFile
// This next part renames the .apk file to include the version number
// as well as the git sha for the commit from which it was built.
applicationVariants.all { variant ->
def oldFile;
if (variant.zipAlign) {
oldFile = variant.outputFile;
} else {
oldFile = variant.packageApplication.outputFile;
}
def newFile;
def newFileReplacement = "";
if (getVersionName().indexOf(gitSha()) != -1) {
newFileReplacement = newFileReplacement + "-" + getVersionName() + ".apk";
} else {
newFileReplacement = newFileReplacement + "-" + getVersionName() + "-" + gitSha() + ".apk"
}
newFile = oldFile.name.replace(".apk", newFileReplacement);
if (variant.zipAlign) {
// Set the name of the final output file
variant.zipAlign.outputFile = new File(oldFile.parent, newFile);
// Set the name of the intermediate file (input to zipAlign) to contain version
// information, too
def oldIntermediateFile = variant.packageApplication.outputFile
def newIntermediateFile = variant.packageApplication.outputFile.name.replace(".apk", newFileReplacement)
variant.packageApplication.outputFile = new File(oldIntermediateFile.parent, newIntermediateFile)
} else {
// Set the name of the final output file (no intermediate file)
variant.packageApplication.outputFile = new File(oldFile.parent, newFile);
}
}
这里发生的是,如果 zipAlign 被禁用,那么variant.packageApplication.outputFile
将是创建的结果文件。如果启用了 zipAlign ,则variant.packageApplication.outputFile
将是创建的中间(未对齐)文件,variant.zipAlign.outputFile
将是创建的最终(对齐)文件。因此,我通过更改的名称>> variant.packageApplication.outputFile
和 variant.zipAlign.outputFile
来获取zipAlign以使用不同名称的文件。
后人的最后一点说明:
如果你犯了同样的错误,我原本试过:
variant.zipAlign.outputFile = new File(oldFile.parent, newFile);
variant.packageApplication.outputFile = new File(oldFile.parent, newFile);
但是,这不起作用,因为未对齐的文件名和对齐的文件名具有相同的名称,zipAlign将拒绝将文件对齐到自身(即它必须具有与其不同的输出文件名)输入文件名)。