GitHub Actions deploy to PlayMarket
Кто-то делал деплой при помощи GitHub Actions в PlayMarke? Сейчас столкнулся с проблемой, что я не могу понять как настроить Gradle так чтобы он понимал мой keystore.properties, а когда его нет то брал из enviroment.
Нашел, одну статью для флаттера, откуда и взял как настроить envroments: https://medium.com/@danieln.llewellyn/flutter-github-actions-for-a-signed-apk-fcdf9878f660
Но тогда, у меня возникает проблема, что локально я не могу собрать подписанный проект.
Мой Gradle:
apply plugin: ...
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
...
signingConfigs {
release {
storeFile file("../MyKey.jks")
storePassword keystoreProperties['RELEASE_STORE_PASSWORD']
keyAlias keystoreProperties['RELEASE_KEY_ALIAS']
keyPassword keystoreProperties['RELEASE_KEY_PASSWORD']
}
debug {
storeFile file('../debug.keystore')
}
}
buildTypes {
release {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
minifyEnabled false
signingConfig signingConfigs.release
buildConfigField "String", "PIN_ALIAS", keystoreProperties['PIN_ALIAS']
buildConfigField "String", "DB_PASS_ALIAS", keystoreProperties['DB_PASS_ALIAS']
}
debug {
minifyEnabled false
signingConfig signingConfigs.debug
buildConfigField "String", "PIN_ALIAS", keystoreProperties['PIN_ALIAS']
buildConfigField "String", "DB_PASS_ALIAS", keystoreProperties['DB_PASS_ALIAS']
}
}
}
dependencies {
...
}
Может быть у кого есть более толковый подход, буду благодарен.
Ответы (1 шт):
Решение не идеальное, но в полне рабочее, а в будущем будет отимизироваться:
def keystoreProperties = new Properties()
if (rootProject.file("keystore.properties").exists()) {
keystoreProperties.load(new FileInputStream(rootProject.file("keystore.properties")))
release_store_password = keystoreProperties['RELEASE_STORE_PASSWORD']
release_key_password = keystoreProperties['RELEASE_KEY_PASSWORD']
release_key_alias = keystoreProperties['RELEASE_KEY_ALIAS']
pin_alias = keystoreProperties['PIN_ALIAS']
db_pass_alias = keystoreProperties['DB_PASS_ALIAS']
} else {
release_store_password = System.env.RELEASE_STORE_PASSWORD
release_key_password = System.env.RELEASE_KEY_PASSWORD
release_key_alias = System.env.RELEASE_KEY_ALIAS
pin_alias = System.env.PIN_ALIAS
db_pass_alias = System.env.DB_PASS_ALIAS
}
def versionPropsFile = rootProject.file('version.properties')
Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def verCode = versionProps['VERSION_CODE'].toInteger()
android {
defaultConfig {
...
versionCode verCode
versionName "1.1.$verCode"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
applicationVariants.all { variant ->
variant.outputs.each { output ->
def buildType = variant.buildType.name
output.outputFileName = "notification_tracker" + "." + buildType + ".apk"
}
}
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas")
}
}
}
signingConfigs {
release {
storeFile file("../MyKey.jks")
storePassword = release_store_password
keyAlias = release_key_alias
keyPassword = release_key_password
}
debug {
storeFile file('../debug.keystore')
}
}
buildTypes {
release {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
minifyEnabled false
signingConfig signingConfigs.release
buildConfigField "String", "PIN_ALIAS", "\"$pin_alias\""
buildConfigField "String", "DB_PASS_ALIAS", "\"$db_pass_alias\""
}
debug {
minifyEnabled false
signingConfig signingConfigs.debug
buildConfigField "String", "PIN_ALIAS", "\"1234\""
buildConfigField "String", "DB_PASS_ALIAS", "\"1234\""
}
}
}
def static getTime() {
return new Date().format("ddMMHHmm", TimeZone.getDefault())
}
dependencies {
...
}
Workflow:
build:
runs-on: ubuntu-latest
name: Build release-apk and deploy to PlayMarket
steps:
- uses: actions/checkout@v2
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
# Without NDK not compile and not normal error message. NDK is required
- name: Install NDK
run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;20.0.5594570" --sdk_root=${ANDROID_SDK_ROOT}
# Some times is have problems with permissions for ./gradle file. Then uncommit it code
# - name: Make gradlew executable
# run: chmod +x ./gradlew
- name: Output version code
run: echo VERSION_CODE=${{ github.run_number }} > ./version.properties
- name: Build with Gradle
run: ./gradlew assemble
env:
RELEASE_STORE_PASSWORD: ${{ secrets.RELEASE_STORE_PASSWORD }}
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
PIN_ALIAS: ${{ secrets.PIN_ALIAS }}
DB_PASS_ALIAS: ${{ secrets.DB_PASS_ALIAS }}
- name: Upload APK
uses: actions/upload-artifact@v2
with:
name: notification_tracker
path: app/build/outputs/apk/release/notification_tracker.release.apk
Готовое решение можно найти тут: workflow, Gradle. Общую инструкцию можно найти тут.