Android开发中,Native开发的场景不多,一般是牵扯一些秘钥或者比较隐私的东西才需要Native编程来避免一些泄漏,如秘钥保护,核心算法等,所以一旦涉及NDK编程就觉的可能比较复杂,但是其实NDK编程的门槛并不高,入门很简单。
Native工程搭建
核心PRJ配置如下图
支持native开发的核心配置如下
- 添加CMakeLists.txt编译配置文件
-
build文件中添加Native配置
android { compileSdkVersion 30 ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "" } } } externalNativeBuild { cmake { <!--刚才的CMakeLists.txt编译配置文件--> path "src/main/cpp/CMakeLists.txt" version "3.10.2" } }
- 修改CMakeLists.txt,一般有模板可以供你参考
你可以通过指导搭建一个空的Native工程作为参考:
如果想要做成Module组件,可以新建一个Library,拷贝上述配置即可。
Native编码
Java与Native名字:两种处理方式
1,静态绑定的方式
采用包名+类名+方法名组合的方式,强制映射
2、动态注册的方式【比较安全】
这种方式相对第一种安全一些,可以帮助隐藏符号表,有一定的混淆效果。
Native SO 安全
动态注册可以隐藏方法名,让破解者更难找,但这也只是防止破解so的一个点,还可以通过加入一些校验的方式来防止其他APP使用你的so库,比如埋一些自己APP特有值,通过so中反查对比,通过这种方式防止so被其他APP直接调用,可以直接用的特征值有
- APP端包名
- 秘钥签名
- 自创核验文案
- 借助第三方加固