先说下版本 Android Studio 2.1.2; android-ndk-r10d
达到的最终结果:
在一个Android中可以引用多个自定义的c++实现模块(xxx.so)
1,先创建一个简单的Android Project. 设置好ndk相关配置
选择菜单(File=>Project Structure=>SDK Location),配置好相应的参数,然后打开`gradle.properties`文件,在末尾加上`android.useDeprecatedNdk=true`
2,在Project视图中切换到Project,在first=>src=>main=>java=>com.xxx.xxx目录下添加一个java class文件(native_to_java.java),内容如下:
`//native_to_java.java
package com.example.administrator.externel_lib;
public classnative_to_java {
static{ System.loadLibrary("first");}
public static native int first_func(int x);
}`
3,菜单选择(Build=>Make Project)或者直接(ctrl+F9),生成native_to_java.class文件
4,菜单选择(View=>Top Windows=>Teminal),切换到app/src/main/java目录下,运行
`javah -jni com.example.administrator.externel_lib.classnative_to_java`生成c++头文件
`com.example.administrator.externel_lib.classnative_to_java.h`
5,在Project视图中切换到Project,在工程顶节点右键选择(New=>Module=>Android Library),取名为`first`
6,在first=>src=>main目录下新建目录(Directory),取名字(jni),把第4步中生成的头文件`com.example.administrator.externel_lib.classnative_to_java.h`放入其中,并在jni中添加头文件函数的实现文件xxx.cpp;
7,在xxx.cpp中定义`int first_func(int x)`的实现。并在jni目录中添加一个空的abc.c文件。(需要一个.c文件,不然会编译失败,我电脑上是这个样子)
8,配置 first=>build.gradle 中的 android=>defaultConfig节点。在后面添加
`
ndk{
moduleName "first"
//这里可以添加一些其他的编译项给当前模块,比如,依赖的库文件 ,可以用 ldLibs "m"来说明需要链接libm.so,还有一些其他选项
`
9,配置`app=>build.gradle`文件的`dependencies`节点,添加`app`对模块`first`的依赖
`
dependencies
{
//在末尾添加下面的值,这里添加后
compile project(':first')
}
`
10,在第9步添加可以在菜单(File=>Project Structure=>modules=>app)的`dependencies`下可以看到,但是在这里添加依赖模块在我的电脑上无法操作;
到这里,关于添加`first`模块的所有配置已经完成,然后把class就可以在`app`的安卓代码里面调用`classnative_to_java.first_func(...)`函数了,配好手机连接,点击编译,运行,就成功了;如果想添加第二个模块`second`, 直接回到第二步再操作一遍。