Android ndk编程注意事项

2021/05/21

Android开发中,Native开发的场景不多,一般是牵扯一些秘钥或者比较隐私的东西才需要Native编程来避免一些泄漏,如秘钥保护,核心算法等,所以一旦涉及NDK编程就觉的可能比较复杂,但是其实NDK编程的门槛并不高,入门很简单。

Native工程搭建

核心PRJ配置如下图

image.png

支持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工程作为参考:

image.png

如果想要做成Module组件,可以新建一个Library,拷贝上述配置即可。

Native编码

Java与Native名字:两种处理方式

1,静态绑定的方式

采用包名+类名+方法名组合的方式,强制映射

image.png

2、动态注册的方式【比较安全】

image.png

这种方式相对第一种安全一些,可以帮助隐藏符号表,有一定的混淆效果。

Native SO 安全

动态注册可以隐藏方法名,让破解者更难找,但这也只是防止破解so的一个点,还可以通过加入一些校验的方式来防止其他APP使用你的so库,比如埋一些自己APP特有值,通过so中反查对比,通过这种方式防止so被其他APP直接调用,可以直接用的特征值有

  • APP端包名
  • 秘钥签名
  • 自创核验文案
  • 借助第三方加固

Search

    Table of Contents