buildConfigField не восстанавливает мой ключ API из gradle.properties - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь защитить свой ключ API, потому что я хочу загрузить общедоступный репозиторий, я попытался с этим на своем gradle и добавил ключи в gradle.properties файл

build.gradle

 buildTypes {

        debug {
            buildConfigField 'String', "FIRST_APIKEY", "\"FIRST_APIKEY\""
            buildConfigField 'String', "SECOND_APIKEY", "\"SECOND_APIKEY\""
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

gradle.properties

FIRST_APIKEY = "apikey"
SECOND_APIKEY = "apikey"

, где указано, что apikey - это текущий буквенно-цифровой apikey

, и когда я внедряю это в класс для получения этого apikey, он не возвращаетapikey

Например, здесь я пытаюсь проанализировать данные из этого apikey, но я ничего не получаю, потому что они не могут быть достигнуты

service.getData(BuildConfig.FIRST_APIKEY)....

Результатом BuildConfig.FIRST_APIKEY с отладчиком является следующий

result = FIRST_APIKEY

вместо FIRST_APIKEY он должен реализовывать мой apikey, который я ранее настроил в gradle.properties файле

Спасибо за любой совет

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Сначала загрузите ваши свойства в Properties объект в фазе конфигурации gradle:

apply plugin: 'com.android.application'

Properties localProperties = new Properties()
localProperties.load(project.rootProject.file('local.properties').newDataInputStream())

А затем вы можете найти ваше свойство для buildConfigField:

buildConfigField 'String', "FIRST_APIKEY", localProperties.getProperty('FIRST_APIKEY')
buildConfigField 'String', "SECOND_APIKEY", localProperties.getProperty('SECOND_APIKEY')

ЕслиВаши свойства выглядят так:

FIRST_APIKEY=apikey
SECOND_APIKEY=apikey

Тогда вам нужно заменить localProperties.getProperty('FIRST_APIKEY') на "\"${props.getProperty('FIRST_APIKEY')}\"".

0 голосов
/ 09 февраля 2019

вы не должны назначать статическую строку, а скорее переменную:

buildConfigField("String", "FIRST_APIKEY", "\"${firstApiKey}\"")
resValue("string", "first_api_key", "${firstApiKey}")

, и она может не заботиться о каких-либо .properties, если только не загружает их;например:

def apikeys = new Properties()
apikeys.load(new FileInputStream(rootProject.file('apikeys.properties')))
project.ext.set('firstApiKey', apikeys['firstApiKey'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...