Skip to content

happylishang/NDKExample

Repository files navigation

NDKExample

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端包名
  • 秘钥签名
  • 自创核验文案
  • 借助第三方加固

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors