android studio NDK 配置及入门案例
2016-07-20 01:45
429 查看
据说android studio 的NDK现在开发已经很方便了,现在来尝试一波。
首先介绍一下我的android studio 环境 android studio 1.5
首先需要配置一下NDK开发环境:
1,下载android-ndk-r10,并解压 32位windows下载地址 64位windows下载地址
2,点击project structure--->选择SDK Location --->选择解压后的android-ndk-r10路径--->点击OK(这一步相当于配置了local.properties ,会在这个文件夹添加你ndk的路径)
3,一般ndk都不会是单独的一个工程,一般都会是工程中的一个module ,而且一般这个module 都是当做library来用。
因此下面新建一个module设置为library,名字为Test,生成module之后,就build一下module;
4,然后在module里面的build.gradle里面加上声明ndk模块的语句,即
build.gradle文件里的android{}块儿,添加了上述语句后整体效果为:
} buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}
5,然后在Test的包com.example.dfy.test下编写一个文件HelloJNI.class,如图
HelloJNI.class的内容为
然后build 一下这个module;
如果有提示诸如JNI 是实验版本,被忽略等的错误时,错误提示一般会提示让在工程的load.properties文件里加上这句
,如果你public static native getStringFromC();这一句一直出现cannot solve corresponing jni function 的提示,(其实你不需要处理这个提示就行)
(如果你不想让提示,就请点击project structure ------>选择plugins———>这时如果你的android support ndk后面的对勾是选中的,请去掉对勾,点击确定,就能解决上面的错误提示。)
6,好了,现在如果没有其他错误就可以生成头文件(.h)了
在Android Studio 的Terminal 终端输入
然后执行
这句命令会在当前module下生成jni文件夹(-d ),并在jni文件夹下生成一个com_example_dfy_test_HelloJNI.h的头文件
具体如下:
com_example_dfy_test_HelloJNI.h的头文件内容如下:
7,编写一个.c的文件名字任意命名,我这里名字命名为Hello.c
内容为:
可是由于Android ndk平台还存在bug,至少我用的Android studio 1.5 版本有bug,会报错。
这里只需要在jni文件夹下再创建一个空的.c文件即可,名字可以随意命名,但不要重复,这里我命名为helio2.c。
然后在build 一下,然后如果没有出错,那么你就会看到test\build\intermediates会多出一个ndk文件夹,在ndk\debug\lib下生成了各个平台的.so文件,如图
最后看一下module test的整体文件布局:
首先介绍一下我的android studio 环境 android studio 1.5
首先需要配置一下NDK开发环境:
1,下载android-ndk-r10,并解压 32位windows下载地址 64位windows下载地址
2,点击project structure--->选择SDK Location --->选择解压后的android-ndk-r10路径--->点击OK(这一步相当于配置了local.properties ,会在这个文件夹添加你ndk的路径)
3,一般ndk都不会是单独的一个工程,一般都会是工程中的一个module ,而且一般这个module 都是当做library来用。
因此下面新建一个module设置为library,名字为Test,生成module之后,就build一下module;
4,然后在module里面的build.gradle里面加上声明ndk模块的语句,即
ndk{ moduleName "test" }
build.gradle文件里的android{}块儿,添加了上述语句后整体效果为:
android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk{ moduleName "test" }
} buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}
5,然后在Test的包com.example.dfy.test下编写一个文件HelloJNI.class,如图
HelloJNI.class的内容为
package com.example.dfy.test; /** * Created by Administrator on 2016/7/20. */ public class HelloJNI { static { System.loadLibrary("test"); //这里的名字要和build.gradle文件里的ndk名字保持一致 } public static native String getHello();//这个方法就是要通过jni调用实现 }
然后build 一下这个module;
如果有提示诸如JNI 是实验版本,被忽略等的错误时,错误提示一般会提示让在工程的load.properties文件里加上这句
android.useDeprecatedNdk=true
,如果你public static native getStringFromC();这一句一直出现cannot solve corresponing jni function 的提示,(其实你不需要处理这个提示就行)
(如果你不想让提示,就请点击project structure ------>选择plugins———>这时如果你的android support ndk后面的对勾是选中的,请去掉对勾,点击确定,就能解决上面的错误提示。)
6,好了,现在如果没有其他错误就可以生成头文件(.h)了
在Android Studio 的Terminal 终端输入
cd test\src\main其实就是进入test\src\main路径下,(这里Test是library module 的名字)
然后执行
javah -d jni -classpath ..\..\build\intermediates\classes\debug com.example.dfy.test.HelloJNI
这句命令会在当前module下生成jni文件夹(-d ),并在jni文件夹下生成一个com_example_dfy_test_HelloJNI.h的头文件
具体如下:
com_example_dfy_test_HelloJNI.h的头文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_example_dfy_test_HelloJNI */ #ifndef _Included_com_example_dfy_test_HelloJNI #define _Included_com_example_dfy_test_HelloJNI #ifdef __cplusplus extern "C" { #endif /* * Class: com_example_dfy_test_HelloJNI * Method: getHello * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_dfy_test_HelloJNI_getHello (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
7,编写一个.c的文件名字任意命名,我这里名字命名为Hello.c
内容为:
#include "com_example_dfy_test_HelloJNI.h" JNIEXPORT jstring JNICALL Java_com_example_dfy_test_HelloJNI_getHello (JNIEnv *env, jclass jclass){ return (*env)->NewStringUTF(env,"Hello JNI !"); }8,好了,按道理说.h和.c文件都有了,只要build一下module 就能生成.so文件了,
可是由于Android ndk平台还存在bug,至少我用的Android studio 1.5 版本有bug,会报错。
这里只需要在jni文件夹下再创建一个空的.c文件即可,名字可以随意命名,但不要重复,这里我命名为helio2.c。
然后在build 一下,然后如果没有出错,那么你就会看到test\build\intermediates会多出一个ndk文件夹,在ndk\debug\lib下生成了各个平台的.so文件,如图
最后看一下module test的整体文件布局:
相关文章推荐
- 关于在android studio百度地图开发中的java.lang.UnsatisfiedLinkError问题。
- Android之handler篇
- 【Android】35、基本布局——RelativeLayout
- android将图片转换为圆形图片
- Android 操作SQLite基本用法
- 关于fragment
- 浅析Android中的消息机制
- Collapsing ToolbarLayout
- android广播监听手机通话状态
- NDK之Android.mk文件
- Android学习笔记--Context到底是什么?
- android studio如何引入第三方fastjson架包
- 使用Android Studio进行单元测试
- Android-DataBind使用
- Android中IntentService的原理及使用
- android---- Serializable 和 Parcelable 区别
- 详解Android中AsyncTask的使用
- Android 6.0的lowmemorykiller机制
- Android Studio 编写 JNI
- Android适配