Ich versuche, die versionName und VersionCode-Parameter in Android Manifest automatisch zu aktualisieren und sie im Namen der Ausgabedatei anstelle von "app-release.apk" zu verwenden.Wie automatisch signierte Apk in Android Studio mit Gradle-Skript zu erhöhen und zu lösen
Von this site habe ich diesen Code in meiner build.gradle Datei:
import java.util.regex.Pattern
import com.android.builder.core.DefaultManifestParser
def mVersionCode
def mNextVersionName
def newName
task ('increaseVersionCode') << {
def manifestFile = file("src/main/AndroidManifest.xml")
def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
mVersionCode = Integer.parseInt(matcher.group(1))
def manifestContent = matcher.replaceAll("versionCode=\"" + ++mVersionCode + "\"")
manifestFile.write(manifestContent)
}
task ('incrementVersionName') << {
def manifestFile = file("src/main/AndroidManifest.xml")
def patternVersionNumber = Pattern.compile("versionName=\"(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\"")
def manifestText = manifestFile.getText()
def matcherVersionNumber = patternVersionNumber.matcher(manifestText)
matcherVersionNumber.find()
def majorVersion = Integer.parseInt(matcherVersionNumber.group(1))
def minorVersion = Integer.parseInt(matcherVersionNumber.group(2))
def pointVersion = Integer.parseInt(matcherVersionNumber.group(3))
def buildVersion = Integer.parseInt(matcherVersionNumber.group(4))
mNextVersionName = majorVersion + "." + minorVersion + "." + pointVersion + "." + (buildVersion + 1)
def manifestContent = matcherVersionNumber.replaceAll("versionName=\"" + mNextVersionName + "\"")
manifestFile.write(manifestContent)
}
tasks.whenTaskAdded { task ->
if (task.name == 'generateReleaseBuildConfig') {
task.dependsOn 'increaseVersionCode'
task.dependsOn 'incrementVersionName'
}
}
dieser Code funktioniert perfekt, die 2 Aufgaben auszuführen und korrekt die Manifest-Datei aktualisieren. Jetzt möchte ich die 2 Variablen verwenden mVersionCode
und mNextVersionName
im release
Block innerhalb des buildTypes
wie folgt aus:
newName = defaultConfig.applicationId + "-" + mNextVersionName + " (" + mVersionCode + ").apk"
applicationVariants.all { variant ->
variant.outputs.each {output ->
def file = output.outputFile
output.outputFile = new File(file.parent, file.name.replace("app-release.apk", newName))
}
}
aber der Rückgabewert der 2 ist null.
Ich habe auch versucht festigende Eigenschaften und zusätzliche Eigenschaften:
task.setProperty("vName", mNextVersionName)
ext.vName = mNextVersionName
extensions.extraProperties.set("vName", mNextVersionName)
in den 2 Aufgaben und sie im release
Block ohne Glück zu bekommen.
Hat jemand Ideen, wie dies zu erreichen ist?
wäre es besser, wenn wir diesen Code bei BuildType {VersionCode ..., VersionName ...} ausführen können. Ja, habe ich, brauchen Sie die Lösung von mir? – VinceStyling
Sicher, lass uns sehen, was deine Lösung ist –