Как сгенерировать подписанный и неподписанный APK с помощью градиента?
Мне нужно сгенерировать как беззнаковые, так и подписанные apks с помощью командной строки gradlew assembleRelease
(gradlew assembleRelease
- это команда im, использующая сейчас)
Апки должны быть выровнены. Я проверил это: Build Unsigned APK с Gradle, но, похоже, это старый способ добиться этого, теперь он не работает и что-то изменилось в последних версиях компиляции android и gradle. А также мне нужно сгенерировать оба apks одновременно, не только режим выпуска или неподписанный режим
Ответы
Ответ 1
Я думаю, что buildTypes
является более подходящим местом, чем productFlavors
.
Вы можете расширить свою версию релиза с заменой signedConfig.
buildTypes {
release {
....
signingConfig signingConfigs.release
}
releaseUnsigned.initWith(buildTypes.release)
releaseUnsigned {
signingConfig null
}
}
Затем для создания обоих APK файлов:
./gradlew assemble
Или если вы хотите только выпускать сборки
./gradlew assembleRelease assembleReleaseUnsigned
or ./gradlew assR assRU
Если вы действительно хотите использовать только задачу assembleRelease, вы можете сделать эту зависимость
assembleRelease.dependsOn assembleReleaseUnsigned
И строить с помощью просто
./gradlew assembleRelease
Ответ 2
Ответ, на который вы ссылаетесь, верен - если выбранный вами вариант (например, тип сборки + комбинация вкуса) не использует конфиг подписи под подпиской, gradle создаст неподписанный APK.
Таким образом, вы можете определить настройку следующим образом:
android {
signingConfigs {
release { ... }
}
productFlavors {
signed {
signingConfig signingConfigs.release // defined above
}
unsigned {} // use the default options
}
}
Затем запустите ./gradlew :app:assembleRelease
создаст ваши APK:
app/build/outputs/apk
├── app-signed-release.apk
├── app-signed-release-unaligned.apk
└── app-unsigned-release-unsigned.apk
Ответ 3
Я знаю, что это довольно старый ответ, но он все равно может помочь кому-то достичь вашей цели, не добавляя дополнительного вкуса (даже в моем случае это может быть сложно, потому что многие зависимости в проекте).
android {
signingConfigs {
release { ... }
}
productFlavors {
signed {
signingConfig (checkUnsigned() ? null : signingConfigs.release)
}
}
def checkUnsigned () {
return project.hasProperty("unsigned")
}
Чтобы использовать его, просто используйте
gradle assembleRelease
или
gradle assembleRelease '-Punsigned'
для создания unsigned (кавычки для CI, иначе это может и не понадобиться)
Недостатком решения является то, когда вы хотите собрать несколько ароматов в одной строке, т.е.
gradle assembleRelease assembleDebug assembleRelease '-Punsigned'
assembleRelease проверяет все свойства в командной строке, так что сначала assembleRelease будет callse также с параметром '-Punsigned' Я разрешил эту проблему CI, используя две команды: одну для подписанной, другую для неподписанных версий
gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour