NDK开发杂记

理解.SO文件

首先,应用程序的二进制接口(Application Binary Interface)定义了二进制文件如何在相应的平台上运行。即,ABI定义了.so文件的运行方式。

而,不同的CPU架构,对应不同的ABI:

CPU:ARMv5 ==> ABI:armeabi

CPU:ARMv7 ==> ABI:armeabi-v7a

CPU:ARMv8 ==> ABI:arm64-v8a

CPU:x86 ==> ABI:x86

CPU:x86_64 ==> ABI:x86_64

CPU:MIPS ==> ABI:mips

CPU:MIPS64 ==> ABI:mips64

另外,ARMv8和x86的设备都可以运行armeabi和armeabi-v7a的.so文件。但是会降低CPU性能或者可能程序报错。

NDK是向前兼容,所以编译生成.so文件是用最小platform(app中minSdkVersion)来编辑.

所以,需要针对不同CPU架构配置不同的.so文件。


简介:

1、配置NDK。Android Studio在File-->Project Structure中配置NDK路径。在app/build.gradle中defaultConfig中添加ndk{moduleName "PatchJNI"}。

2、声明native方法。如:com/example/app/utils/Patch.java中声明native方法。紧接着build下工程。

3、生成头文件。Termimal中输入如下命令。注意目录位置。会在当前目录下自动创建一个jni文件夹,并在jni文件夹内生成头文件。

命令:javah -d jni -classpath ...sdk\platforms\android-19\android.jar;..\..\build\intermediates\classes\debug(空格)com.example.app.utils.Patch

4、复制头文件的方法,新建任意文件名的C文件,并用C实现该方法。

5、在jni目录先创建Android.mk和Application.mk。

6、定义.so文件生成目录。在app/build.gradle中与defaultConfig同级,添加sourceSets.main{jni.srcDirs = []  jniLibs.srcDir 'src/main/libs'},将会在src/main下创建libs并在libs中生成相应ABI的.so目录及文件。

7、执行ndk-build.cmd命令。先定位到ndk目录,然后执行ndk-build.cmd命令。然后就会生成.so文件。

你可能感兴趣的:(NDK开发杂记)