理论知识:
NDK的作用 C语言通用 方便后期维护减少开发量
NDK的优点:1.运行效率高2.利于充分发挥软硬件优势3.利于代码复用4.降低版本控制成本5.降低开发成本
NDK的缺点:1.开发难度相对高2.调试难度相对高3.增加开发团队规模
NDK编译流程图
实际操作
NDK安装与配置:
1-安装android studio
可到android中文官网下载
2-插件里选择下载Android NDK包
3-创建一个新的android工程,并新建一个类
在Activity里永远访问不到android.support.v7.app.AppCompatActivity
找不到android.support.v7.app.AppCompatActivity的类文件
不知道为什么,知道的同学麻烦在评论里提示一下
4-声明native函数,并build生成classes声明native函数
public native String getStringFromNative()
声明hello本地库
static{
System.loadLibrary("hello");
}
/**
* Created by HYAD-PC01 on 2017/1/8.
*/
public class TestJni {
static{
System.loadLibrary("hello");
}
public static native String getString();
public native String getString();
public native int add(int a,int b);
}
build
这步很重要哦,有时候找不到类就是因为没有编译,具体有没有编译可以去classes文件下查看一下
查看生成classes文件
项目->app->build->intermediates->classes->包名->我们的.class文件
5-使用javah生成头文件,并创建jni文件夹
cmd:
进入app——path/app/src/main/;
javah -d jni -classpath android_sdk_path/android.jar class_name注:android_sdk_path:本机sdk目录
android.jar :当前项目jar版本
jni文件下
如果这里错误请跟步骤严肃再来一遍并注意以下问题:
1.Terminal
一开始我是在android studio自带的Terminal里写的命令,然而并没有什么软用,死活不对于是改成cmd。如果你有解决办法,请联系我,如果没有呢就一起用cmd吧
2.报找不到android.support.v7.app.AppCompatActivity
说法一:是因为编译的classpath 未加入v4和v7库
请参考
http://www.itnose.net/detail/6291798.html
说法二:Activity生成jni就是矫情,改用新建class就什么毛病都没了(亲测推荐)
3.命令标准写法
6-创建C/C++程序并include头文件
在jni文件下新建C/C++文件
7-设置NDK路径:包括(local.properties)及Gradle文件(build.gradle)
local.properties里加一行(盘符双斜杠,不然编译不过)
build.gradle
注:moduleName必须与这里设置的一样
abiFilters 设置了在那些平台上可以应用
8-编译NDK程序(build),并生成*.so(android_ndk_path:\项目\app\build\intermediates\ndk\debug\lib\armeabi)
编译
genymotion的cpu是x86的
参考
http://www.07net01.com/2016/04/1445592.html