使用Android Studio开发ndk-Jni(入门)
2016-01-19 15:35
555 查看
1、新建一个JNINDKDemo工程,咱们开始讲
2、新建JniUtils类并实现随便一个native方法,好啦,首先是报红色的。
3、接下来clean project然后再rebuild project
4、完成以上操作后,将左侧切换到Project视图,在程序(这里是app)下的build-->intermediates文件夹下查看是否生成classes文件夹,没有则重复第三步骤。
5、打卡终端,定位到第四步骤所在的classes文件夹下的debug文件夹下(这里程序直接创建在C盘下,运行命令:
cd C:\JNINDKDemo\app\build\intermediates\classes\debug );然后再执行命令:javah -jni com.example.jnindkdemo.JniUtils(这里写的是刚才咱们创建的JniUtils类的绝对路径),报错的请再布布课,看java环境配好了吗。
6、这时候再打开步骤四中的classes文件夹下的debug文件夹,发现多了个.h后缀的文件
7、然后在src/main下新建文件夹jni,把生成的.h文件复制或者剪切到jni文件夹下面去,新建一个c类随便取一个名字(这里就是helloC),添加代码如下:
如果这里发现头文件#include <jni.h>报红色,是因为咱们还没有配置ndk环境,打开file->project structure选择你所下载的ndk环境路径,如果没有ndk这里有个地址大家可以去下载 一个安卓工具集合的网站:http://androiddevtools.cn/
8、设置好了之后,发现头文件还是红色的,然后再build一下工程,就会有提示
Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set "android.useDeprecatedNdk=true" in gradle.properties to
continue using the current NDK integration.
按着提示做就行了 在gradle.properties文件末尾添加android.useDeprecatedNdk=true就ok啦
9、然后在app文件下得build.gradle ->defaultConfig括号内添加如下代码
10、咱们打开app->intermediates-ndk-debug发现生成了三个文件夹,并且对应了之前我们在build.gradle配置的abiFilters,大功告成。
然后咱们把lib文件夹下的文件全部复制一份,在src\main下新建jniLibs文件夹,全部粘贴到这里,好了,自己做的so文件可以随便使用了,现在把刚才咱们建的jni文件夹和里面的文件全部删除,在MainActivity调用一下试试
2、新建JniUtils类并实现随便一个native方法,好啦,首先是报红色的。
package com.example.jnindkdemo; /** * Created by luckchoudog on 2016/1/19. */ public class JniUtils { public static native String getStringFormC(); }
3、接下来clean project然后再rebuild project
4、完成以上操作后,将左侧切换到Project视图,在程序(这里是app)下的build-->intermediates文件夹下查看是否生成classes文件夹,没有则重复第三步骤。
5、打卡终端,定位到第四步骤所在的classes文件夹下的debug文件夹下(这里程序直接创建在C盘下,运行命令:
cd C:\JNINDKDemo\app\build\intermediates\classes\debug );然后再执行命令:javah -jni com.example.jnindkdemo.JniUtils(这里写的是刚才咱们创建的JniUtils类的绝对路径),报错的请再布布课,看java环境配好了吗。
6、这时候再打开步骤四中的classes文件夹下的debug文件夹,发现多了个.h后缀的文件
7、然后在src/main下新建文件夹jni,把生成的.h文件复制或者剪切到jni文件夹下面去,新建一个c类随便取一个名字(这里就是helloC),添加代码如下:
#include "com_example_jnindkdemo_JniUtils.h" JNIEXPORT jstring JNICALL Java_com_example_jnindkdemo_JniUtils_getStringFormC (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"helloC,neic to meet you!");}可以打开下.h文件,咱们在c类中的方法名可是要和.h中的方法一致的,就像java中的实现一样,c类去实现.h中的方法。
如果这里发现头文件#include <jni.h>报红色,是因为咱们还没有配置ndk环境,打开file->project structure选择你所下载的ndk环境路径,如果没有ndk这里有个地址大家可以去下载 一个安卓工具集合的网站:http://androiddevtools.cn/
8、设置好了之后,发现头文件还是红色的,然后再build一下工程,就会有提示
Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set "android.useDeprecatedNdk=true" in gradle.properties to
continue using the current NDK integration.
按着提示做就行了 在gradle.properties文件末尾添加android.useDeprecatedNdk=true就ok啦
9、然后在app文件下得build.gradle ->defaultConfig括号内添加如下代码
ndk { moduleName "NdkJniDemo" //生成的so名字 abiFilters "armeabi", "armeabi-v7a" //输出指定三种abi体系结构下的so库,目前可有可无。 }到了这一步重新build项目,发现已经没有变红了。接下来就是运用了,在JniUtils类里面添加如下代码
static { System.loadLibrary("NdkJniDemo");//之前在build.gradle里面设置的so名字,必须一致(步骤9) }
10、咱们打开app->intermediates-ndk-debug发现生成了三个文件夹,并且对应了之前我们在build.gradle配置的abiFilters,大功告成。
然后咱们把lib文件夹下的文件全部复制一份,在src\main下新建jniLibs文件夹,全部粘贴到这里,好了,自己做的so文件可以随便使用了,现在把刚才咱们建的jni文件夹和里面的文件全部删除,在MainActivity调用一下试试
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toast.makeText(this, JniUtils.getStringFormC(), Toast.LENGTH_SHORT).show(); } }
相关文章推荐
- Android使用Activity用作弹出式对话框
- 史上最详细的Android Studio系列教程(四)--Gradle基础
- 史上最详细的Android Studio系列教程(三)--快捷键
- Android网格视图GridView的使用
- Android中屏蔽 电源键长按、Home键、Home长按
- Android 小米安装apk遇到的问题
- Android不错的图片压缩方法
- Android中对图片的内存优化方法
- Android 自定义日期控件 (仿QQ,IOS7)
- android播放gif图片动画
- Android Drawable资源总结篇
- Android开源项目第一篇——个性化控件(View)篇
- Android 开发百度地图之二定位
- Android开发学习笔记:手机震动控制浅析
- 史上最详细的Android Studio系列教程(二)--基本设置与运行
- android 的Menu菜单
- Android Studio之Gradle多渠道打包
- 常用Android开发组件之图像类组件
- Gradle常用命令使你更敏捷的使用androidstudio
- 开源分享三(炫酷的Android Loading动画)