我正在尝试使用NDK存储api密钥,但我尝试了somany方法总是somany错误 我会分享我的代码,请任何人帮助我..
我将分享我跟随的步骤..
1在src / main
下创建一个文件夹“jni”2在“jni”文件夹下创建并添加“Android.mk”文件,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := keys
LOCAL_SRC_FILES := keys.c
include $(BUILD_SHARED_LIBRARY)
使用以下内容在“jni”文件夹下创建并添加“Application.mk”文件:
APP_ABI := all
创建C / C ++文件“keys.c”并将其添加到“jni”文件夹下。添加以下内容:
# include < jni.h >
JNIEXPORT jstring JNICALL
Java_com_mytest_aes_MainActivity_getNativeKey1(JNIEnv *env, jobject instance) {
return (*env)->NewStringUTF(env, "haii");
}
在您要访问密钥的活动中(在我们的示例中为MainActivity),创建一个静态块并加载库“keys”,如:
static
{
System.loadLibrary("keys");
}
声明类型native
的两个成员函数以访问C / C ++文件中的键。由于我们存储了2个键,因此我们将声明2个函数:
public native String getNativeKey1();
对于演示,请访问代码中的键,如:
String key1 = new String(Base64.decode(getNativeKey1(),Base64.DEFAULT));
((TextView)findViewById(R.id.key)).setText("Key1-->"+key1);
现在,我们的C / C ++本机文件和Java代码已准备就绪。但是要使用NDK编译或生成本机构建,我们需要在gradle文件中添加条目:
android {
.....
buildTypes {
.....
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
}
我们需要为“Android.mk”文件提供路径。
现在,同步并构建项目。确保您已在模块设置中正确指出NDK路径。
答案 0 :(得分:0)
可以通过多种方法来确保API密钥的安全。
Best practice for storing and protecting private API keys in applications
使用Android NDK保护API密钥
https://medium.com/@abhi007tyagi/storing-api-keys-using-android-ndk-6abb0adcadad
不要忘记在模块设置中正确定义NDK路径。 (文件->项目结构-> SDK位置选项卡-> Android NDK位置)
请注意,使用NDK并不是完整的证明,您仍然可以提取密钥。但是,这将为您的密钥增加一层额外的混淆。
建议的解决方案:-可以根据应用程序中数据的敏感性,结合使用多种方法,例如混淆,加密,使用NDK,在服务器中存储密钥,https集成等。