Android JNI调用c语言

2021-10-27  本文已影响0人  zjl20

配置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文件

E2EA23B2-F17A-49CB-A70D-99416E86A9C9.png

编译命令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 等等)

上一篇下一篇

猜你喜欢

热点阅读