Ответ 1
Обновлено (5/28/15):
Я начал реализовывать свое решение здесь (с открытым исходным кодом): https://github.com/NonameDev/MathApp
- Используйте
System.getenv("TRAVIS")
, чтобы обнаружить, что ваша сборка работает на Travis. -
storeFile rootProject.file('release.keystore')
- сохранить ключ релиза в своем собственном репозитории - travis скроет пароль -
storePassword System.getenv("KEYSTORE_PASS")
- сохранить переменную среды на travis - travis скроет вывод -
keyAlias System.getenv("ALIAS_NAME")
- сохранить переменную среды на travis - travis будет скрывать вывод -
keyPassword System.getenv("ALIAS_PASS")
- сохранить переменную среды на travis - travis будет скрывать вывод -
System.getenv("SERVICE_EMAIL")
- сохранить переменную среды на travis - travis скроет вывод -
rootProject.file('play.p12')
- сохранить сертификат локально - travis сохранит учетную запись электронной почты
Верх build.gradle
:
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'com.github.triplet.gradle:play-publisher:1.1.0'
}
}
Приложение build.gradle
:
apply plugin: 'com.android.application'
apply plugin: 'com.github.triplet.play'
android {
compileSdkVersion 22
buildToolsVersion '22.0.1'
defaultConfig {
applicationId 'burrows.apps.mathapp'
minSdkVersion 9
targetSdkVersion 22
versionCode 1
versionName '1.0'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
signingConfigs {
debug {
storeFile rootProject.file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
if (System.getenv("TRAVIS")) {
release {
storeFile rootProject.file('release.keystore')
storePassword System.getenv("KEYSTORE_PASS")
keyAlias System.getenv("ALIAS_NAME")
keyPassword System.getenv("ALIAS_PASS")
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
if (System.getenv("TRAVIS")) {
play {
serviceAccountEmail = System.getenv("SERVICE_EMAIL")
pk12File = rootProject.file('play.p12')
track = 'production' // or 'alpha' or 'beta' or 'production'
}
}
Исходный ответ:
Вы видели этот ответ? Он отправляет ссылку на свои сборки TravisCI "до" и "после", исправляя свою сборку.
Вот его ответ:
В основном он должен был запустить sudo pip install google-api-python-client
С учетом сказанного я проверил здесь github repo .
Вот его .travis.yml
:
language: android
android:
components:
- build-tools-21.1.2
- extra-android-m2repository
env:
global:
- secure: <removed>
- secure: <removed>
before_install:
- ci/decrypt_files
- ci/start_emulator
install:
- ./gradlew build
before_script:
- ci/wait_for_emulator
script:
- ./gradlew connectedAndroidTestMockDebug
after_success:
- ci/deploy_all
notifications:
email:
- <removed>
Источник: https://github.com/mg6maciej/VielenGamesAndroidClient/blob/develop/.travis.yml
Перед сборкой:
Это часть secure
процесса, в котором используются ключи, и пароль используется с TravisCI (надежно хранится в TravisCI).
before_install:
- ci/decrypt_files
- ci/start_emulator
Источник ci/decrypt_files
:
#!/bin/bash
openssl aes-256-cbc -d -k "$file_password" -in app/gradle.properties.enc -out app/gradle.properties
openssl aes-256-cbc -d -k "$file_password" -in app/crashlytics.properties.enc -out app/crashlytics.properties
openssl aes-256-cbc -d -k "$file_password" -in ci/vielengames.keystore.enc -out ci/vielengames.keystore
openssl aes-256-cbc -d -k "$file_password" -in ci/key.p12.enc -out key.p12
Источник: https://github.com/mg6maciej/VielenGamesAndroidClient/blob/develop/ci/decrypt_files
После сборки:
Здесь python
и другие Google
libs загружаются и используются для развертывания приложения в Google Play
.
after_success:
- ci/deploy_all
Источник ci/deploy_all
:
#!/bin/bash
test "$TRAVIS_BRANCH" == "master" && ci/deploy_google_play
ci/deploy_testfairy
ci/deploy_crashlytics_beta
Источник ci/deploy_google_play
:
#!/bin/bash
DIR=$(dirname $0)
sudo apt-get install python-openssl
sudo pip install google-api-python-client
python $DIR/basic_upload_apks.py com.vielengames $DIR/../app/build/outputs/apk/app-production-release.apk
python $DIR/basic_upload_apks.py com.vielengames.staging $DIR/../app/build/outputs/apk/app-staging-release.apk
Безопасность:
Ваш вопрос 1:
Я считаю, что для приложения должны быть как keystore
, так и p12
, но вы можете безопасно хранить свой пароль с помощью TravisCI (см. "$file_password"
), как и в примере выше.
Ваш вопрос 2:
Даже если у вас есть сертификат keystore
и p12
, вам все равно нужен пароль (см. "$file_password"
) для работы и использования для публикации в хранилище.
Для дополнительной безопасности вы хотите добавить другой логин с меньшими разрешениями, чем основной вход. Вот что автор репо сделал здесь:
...
TRACK = 'beta' # Can be 'alpha', beta', 'production' or 'rollout'
SERVICE_ACCOUNT_EMAIL = (
'[email protected]account.com')
# Declare command-line flags.
argparser = argparse.ArgumentParser(add_help=False)
argparser.add_argument('package_name',
help='The package name. Example: com.android.sample')
argparser.add_argument('apk_file',
nargs='?',
default='test.apk',
help='The path to the APK file to upload.')
...
Источник: https://github.com/mg6maciej/VielenGamesAndroidClient/blob/develop/ci/basic_upload_apks.py