#android #continuous-integration #android-gradle-plugin #github-actions #building-github-actions
Вопрос:
Я пытаюсь заменить ключи API, расположенные в local.properties, значениями секретов Github при использовании действий Github.
Ключ объявляется следующим образом в local.properties:
sdk.dir=/Users/xxxxxxx/Library/Android/sdk
API_KEY="xxxxxx"
Затем в моем build.gradle я получаю свойство, подобное этому:
buildTypes {
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def api = properties.getProperty('API_KEY')
debug {
buildConfigField 'String', "API_KEY", api
resValue('string', "api", api)
.....
Затем выполняются действия на Github, чтобы заменить значение секретом здесь:
on:
push:
jobs:
unit_tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Make gradlew executable
run: chmod x ./gradlew
- name: Update Username from Secrets
env:
MOCK_USERNAME: ${{ secrets.API_KEY }}
run: echo API_KEY="$API_KEY" > ./local.properties
- name: Assemble app debug APK
run: bash ./gradlew assembleDebug --stacktrace
- name: Unit tests
run: ./gradlew test
Однако каждый раз, когда выполняется это действие, сборка завершается со следующей ошибкой:
- Что пошло не так: Возникла проблема с оценкой проекта»: приложение». Параметр, указанный как ненулевой, равен нулю: метод com.android.build.gradle.internal.dsl.buildType.resValue, значение параметра
Строка, на которую он указывает, — это строка BuildConfigField, «API_KEY», строка api.
Что я здесь делаю не так?
Ответ №1:
Я думаю, что вы неправильно поняли реплику:
MOCK_USERNAME: ${{ secrets.API_KEY }}
должно быть так:
API_KEY: ${{ secrets.API_KEY }}