Android JNI调用c语言
配置NDK环境
1.下载 建议不要最新版可能有坑
77B366DB-431F-455F-8DFC-CA5A6D72DDDF.png
export NDK_HOME="/Users/zjl20/Library/Android/sdk/ndk/21.0.6113669"
export PATH=$PATH:$NDK_HOME
3.ndk-build验证环境 如下成功
20171016164034434.png
然后参考这几篇文章吧
https://blog.csdn.net/baidu_34045013/article/details/78994516
https://blog.csdn.net/qq_37858386/article/details/70820881
https://blog.csdn.net/yin1031468524/article/details/79888063
https://blog.csdn.net/niuba123456/article/details/96484961
注意2点
第一 使用javah生成对应.h头文件
需要编译的是.class文件 .class文件位置如下图
先build整个工程 得到build目录下面的.class文件
编译命令javah -jni com.example.administrator.ndk_crypto.Crypto
第二 生成so文件命令ndk-build报错 类似如下
Android NDK: The armeabi ABI is no longer supported. Use armeabi-v7a.
Android NDK: NDK Application 'local' targets unknown ABI(s): armeabi
Android NDK: Please fix the APP_ABI definition in C:/Users/yinjb/AppData/Local/Android/Sdk/ndk-bundle/build//../build/core/default-application.mk
说明armeabi 不支持了 改成armeabi-v7a 改如下2个地方
application.mk中的
APP_CFLAGS += -Wno-error=format-security
APP_ABI := armeabi-v7a
APP_PLATFORM := android-19
APP_ALLOW_MISSING_DEPS=true
build.gradle中的
ndk {
moduleName "Crypto"
abiFilters "armeabi-v7a"
}
so 文件存私密数据,且防止 so文件未知应用盗用
https://www.cnblogs.com/VindyLeong/p/5363667.html
有时候我们需要在客户端 存放一些 保密的数据,比如 服务端的IP 端口,接口的地址,授权的key 等等,如果我们直接写在java中,别人反编译就能看到,那么我们可以把这些数据 存在 so文件中,这样别人就不可能会看到了,顺便 so里面验证 app的签名 来防止别人盗用so文件,
你的签名文件不会被别人拿到 也就拿不到你的签名 就拿不到你放在so文件中的所有东西
( 服务端的IP 端口,接口的地址,授权的key 等等)