Я храню свои учетные ключи в cpp
собственном файле и использую CMake для сборки, затем связываю его с моим приложением:
Текущий код:
My src/main/cpp/credentials-provider-dev.cpp
файл:
JNIEXPORT jobject JNICALL
Java_com_{package}_CredentialsProvider_extractApiCredentials(JNIEnv *env, jobject instance) {
jclass cls = env -> FindClass("com/{path}/models/ApiCredentials");
jmethodID methodId = env -> GetMethodID(cls, "<init>",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
return env -> NewObject(cls, methodId,
env->NewStringUTF("key"),
env->NewStringUTF("other key"),
env->NewStringUTF("another key"),
env->NewStringUTF("key again"),
NULL, NULL
);
}
Мой build.gradle
определяет ссылку на CMakeLists.txt
файл:
externalNativeBuild {
cmake {
path 'src/main/cpp/CMakeLists.txt'
}
}
Мой src/main/cpp/CMakeLists.txt
файл:
cmake_minimum_required(VERSION 3.4.1)
add_library(
credentials-provider-dev
SHARED
credentials-provider-dev.cpp)
Файл credentials-provider-dev
определяет только мои учетные данные среды разработки, и этот код отлично работает, когда я собираю в Debug Type.
Проблема:
У меня также есть подготовка и выпуск сборкии я хочу использовать разные credentials-provider-{dev/staging/production}.cpp
файлы для каждого типа сборки:
debug {
ext.alwaysUpdateBuildId = false
applicationIdSuffix ".debug"
}
staging {
initWith debug
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-app.pro'
signingConfig signingConfigs.release
}
Попытки:
Я использую собственный код для хранения этих ключей из-за лучшего ключазащита.И я не хочу объединять все ключи сборки в один файл из-за безопасности репо.Только тот, кто отвечает за доступ к производственной сборке, имеет файл credentials-provider-production.cpp
и может выпускать сборку.Таким образом, мои товарищи по команде могут иметь только файл dev
и режим отладки сборки.
Я пытался с помощью find_library
проверить на наличие cpp
существование файла перед тем, как вызвать add_library
, как это, но это не такработа, библиотека все еще не добавлена:
find_file(
STAGING_KEY_LIB
PATHS main/cpp/credentials-provider-staging.cpp)
if (STAGING_KEY_LIB)
add_library(
credentials-provider-staging
SHARED
main/cpp/credentials-provider-staging.cpp)
endif()
Я также попробовал параметр CMAKE_BUILD_TYPE
, отправленный на CMakeLists.txt
, как показано ниже.Но основываясь на документе : The valid values are Release and Debug
.Я тоже хочу иметь Staging build, чтобы этот метод не работал
add_library(
credentials-provider-${CMAKE_BUILD_TYPE}
SHARED
credentials-provider-${CMAKE_BUILD_TYPE}.cpp)
В итоге:
Использование собственного кода: как отделить мой секретный ключфайлы в различные файлы на основе типа сборки?Любой, кто имеет опыт работы с этим, пожалуйста, помогите.Спасибо