Aby uniknąć zapisywania hasła magazynu kluczy w postaci zwykłego tekstu, próbuję dodać zależność do zadania assembleRelease utworzonego przez wtyczkę Android Gradle.assembleRelease task dependence - Zapytaj o hasło magazynu kluczy
Sprawdziłem w dokumentacji Gradle Manipulating existing tasks ale jestem w stanie umieścić zależność gdzie powinien
To jest moje zadanie, zdefiniowane w $ korzeń $/myApp/build.gradle powyżej wtyczki android .
task readPasswordFromInput << {
def console = System.console()
ext.keystorePassword = console.readLine('\n\n\n> Enter keystore password: ')
}
apply plugin: 'android'
Następnie próbowałem dwie możliwości oferowanych przez Gradle: task.dependsOn i task.doFirst, ale nie działa. Ten ostatni wydaje się być ignorowany, podczas gdy dependOn dodaje zależność, ale zbyt późno w łańcuchu zależności. Uruchamianie ./gradlew zadania --all wydruki ten
:assembleRelease - Assembles all Release builds [libs:ActionBarSherlock:bundleRelease, libs:DataDroid:bundleRelease, libs:SlidingMenu:bundleRelease]
:compileRelease
...
[SEVERAL TASKS]
...
:packageRelease
...
[SEVERAL TASKS]
...
:readPasswordFromInput
Problemem jest hasło magazynu kluczy jest potrzebny w zadaniu packageRelease
Podobnie jak marginesie, to działa jak chcę
buildTypes {
release {
def console = System.console()
ext.keystorePassword = console.readLine('\n\n\n> IF building release apk, enter keystore password: ')
debuggable false
signingConfigs.release.storePassword = ext.keystorePassword
signingConfigs.release.keyPassword = ext.keystorePassword
signingConfig signingConfigs.release
}
}
ale prosi o hasło za każdym razem, gdy korzystasz gradlew, bez względu na to czy jest to czysty lub montaż
Dzięki!
EDIT
Dzięki @Intae Kim, oto moja build.gradle wersja 2,0
task readPasswordFromInput << {
def console = System.console()
ext.keystorePassword = console.readLine('\n\n\n> Enter keystore password: ')
android.signingConfigs.release.storePassword = ext.keystorePassword
android.signingConfigs.release.keyPassword = ext.keystorePassword
}
tasks.whenTaskAdded { task ->
if (task.name == 'validateReleaseSigning') {
task.dependsOn readPasswordFromInput
}
}
apply plugin: 'android'
Następnie buildTypes
release {
debuggable false
signingConfig signingConfigs.release
runProguard true
proguardFile 'my-file.txt'
}
Gradle wykona się poprawnie, ale to tylko generuje a release-unsigned.apk
Dziękuję bardzo! Straciłem całą nadzieję na to^^. Zamierzam odpowiedzieć moim ostatecznym kodem, na razie zostawię twoją jako zaakceptowaną odpowiedź. – Maragues
Dzięki Intae, jestem w stanie odczytać hasło, ale gradle wydaje się czytać go przy pierwszym przejściu i nie generuje podpisanego apk – Maragues
[Ten link gist gint) (https://gist.github.com/jpeddicord/5710705) może ci pomóc. –