Используйте local.properties в build.gradle с секретами Github при использовании действий

#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 }}