您的位置:首页 > 移动开发 > Android开发

android studio NDK开发环境设置

2017-03-17 12:50 357 查看

1、 新建一个android工程

新建一个android工程NdkTest,注意,在新建过程中,未选择Include C++ Support。

2、 安装/设置NDK路径

在此可以通过android studio在线下载安装NDK,也可以离线下载NDK安装包再设置NDK路径。本人将NDK直接放在了SDK目录下,如下:



3、 创建Native接口类

在NdkTest工程中app->src->main->java新建一个native java层的接口类JavaNdk.java,以后就可以用此类中的接口直接调用C/C++实现,在此处用了静态初始化块导入动态库(库名暂时忽略)。如下:


 

4、 新建JNI目录

在main目录下新建一个jni目录,如下:



5、 生成native C头文件

生成native c头文件有两种方式,如下:

5.1 通过*.class文件生成native头文件

1、编译工程,无错。

2、windows下(本人是),通过cmd命令,进入工程目录NdkTest\app\build\intermediates\classes\debug下。

3、通过javah命令生成native c头文件
4000
。命令如下:

javah -classpath  .    -jni  com.example.xk.ndktest.JavaNdk

此处注意:com.example.xk.ndktest是包名,JavaNdk是类名。

扩展:若用eclipse生成头文件时,需要进入eclipse工程下的bin\classes目录下,再javah命令生成头文件。

javah -classpath  .   -jni  com.example.xk.ndktest.JavaNdk

4、完成后,将在NdkTest\app\build\intermediates\classes\debug目录下生成一个头文件,头文件名就是com_example_xk_ndktest_JavaNdk.h。仔细观察,文件名是有规律的。文件内容如下:



      仔细观察文件内容,可以发现一定的规律,只是函数的参数类型可能需要研读JNI相关文件才能明白,此处不做说明。

5、将com_example_xk_ndktest_JavaNdk.h拷贝到jni目录下,并修改为JavaNdk.h(根据个人喜好修改文件名)。

6、至此完成native C/C++头文件的生成。

5.2、通过*.java文件生成native 头文件

1、通过cmd命令进入NdkTest\app\src\main目录。

2、通过javah生成native 头文件。命令如下:

javah -d jni -classpath ./java  com.example.xk.ndktest.JavaNdk

说明:-d jni  头文件生成到jni文件夹。

      ./java  即在当前的java目录下

3、自动生成一个com_example_xk_ndktest_JavaNdk.h头文件到jni目录下,修改文件名为JavaNdk.h。

6、新建native c文件

         在jni目录下,根据JavaNdk.h新建一个JavaNdk.c文件。需要注意:生成的头文件中,函数只声明了参数类型,而没有参数名,所以在JavaNdk.c中需要添加参数名,否则会报错。(此只是一些小细节),如下:



此处只是为了方便,所以都是return 0。

7、设置NDK编译参数

1、打开app目录下build.gradle文件,在defaultConfig项目下添加如下:

     ndk{

            moduleName"NdkTest"

            //abiFilters "armeabi","armeabi-v7a", "x86"

        }

    moduleName:生成的.so文件名,系统生成后会自动添加前缀和后缀,即libNdkTest.so

    abiFilters:根据不同平台生成不同so文件,默认生成android studio支持所有平台so文件。

    扩展:按住 Ctrl进行点击ndk或moduleName会进入相关文件。

                   以下即是ndk的相关参数。分别对应:

ndk{  

             moduleName "JniDemo" // 设置生成的文件名  

             cFlags "-DANDROID_NDK -D_RELEASE" //这个对应的是生成模式  

             ldLibs "m", "log", "jnigraphics" //这个对应 LOCAL_LDLIBS 但是需要去掉前面的 “l”  

             abiFilters "all" //这个是对应的 APP_ABI  

             stl "stlport_shared" //这个对应的是 APP_STL   

}  

说明:在某些情况下需要在buildTypes项下添加如下,具体情况需要具体分析。

                     sourceSets.main {

                        jni.srcDirs = []   //disable automatic ndk-build
call

                         jniLibs.srcDir"src/main/libs"

                   }

     2、打开工程下gradle.properties文件,在文件末尾添加android.useDeprecatedNdk=true,否则不会生成so文件。



    3、查看local.properties文件中NDK路径是否准确。如图:



8、编译工程

在JavaNdk.java中添加库名即步骤7中moduleName设置的名字,如下:



经过上述设置后,编译工程即可在NdkTest\app\build\intermediates\ndk目录下生成各平台的so文件,并直接生成APK文件。

9、引用第三方so库

在NdkTest\app\src\main下新建一个JniLibs文件夹,并新建相关平台的目录,然后相关平台的so文件放入其中。如图:



在相应的nativejava类中声明相关的库名和接口即可正常使用。

 

文中引用了很多大神的结晶。在此一一谢过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: