AndroidStudio开发第一个JNI工程
2016-04-12 18:58
344 查看
转自:http://blog.csdn.net/sodino/article/details/41946607
我根据自己的实践,对该引用的文章做了一些修改(另:由于我的Android Studio版本比较新,所以引用的文章中的bug在我这里没有出现)
本人AndroidStudio版本:2.1,查看方式如下:
使用Android Sutdio创建一个新的工程后,接下来记录创建NDK工程的基本步骤。
本文将达到:
1. 创建NDK工程
2. 在JNI中输出Log语句
3. 指定编译的so库的abi版本
4. 解决在创建NDK工程中的问题
Step: 1. 添加native接口
注意写好native接口和System.loadLibrary()即可了,并无特别之处。
P.S:onCreate()中对R.id.txt执行setText(),所以这里需要对xml布局文件按正常的开发步骤进行修改即可。
直接给出代码如下:
Step: 2.执行Build->Make Project
这一步骤执行一下,验证工程中并无其它错误,并对工程进行了编译,生成了.class文件.
.class文件的生成路径是在 app/build/intermediates/classes/debug下的.如下图:
Step: 3.javah生成c头文件
(注意:执行此步骤的前提是AndroidStudio已经安装了NDK,若尚未安装,在Step5中有安装说明。。)
点击"View->Tool Windows->Terminal",即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件。
这里需要注意的是要进入 <Project>\app\src\main的目录下执行javah命令,为的是生成的 .h 文件同样是在<Project>\app\src\main路径下,可以在Studio的工程结构中直接看到。
操作命令:
javah -d jni -classpath <SDK_android.jar>;<APP_classes> com.bupt.XXX.myapplication.HelloWorldActivity
具体操作图如下:
先cd到src/main目录下,然后执行:
最后的生成结果:
Step: 4.编辑c文件
在helloworld.c文件中实现头文件中的方法,具体功能为直接return回一个String,并且使用android_log打印出相关日志。
代码如下:
到这里后,我们再执行一个"Build->Make Project",发现"Messages Gradle Build"会给出提示如下:
[java] view
plain copy
Error:Execution failed for task ':app:compileDebugNdk'.
> NDK not configured.
Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.
(On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk)
这里提示了NDK未配置,并且需要在工程中的local.properties文件中配置NDK路径。好了,提示很清楚了,那我们就进入下一步吧。
Step: 5.安装配置NDK
这一步包括两个动作:
1.安装:
2.指明ndk路径
2. 修改build.gradle配置
工程中共有两个build.gradle配置文件,我们要修改的是在<Project>\app\build.gradle这个文件。为其在defaultConfig分支中增加上
以上配置代码指定的so库名称为HelloWorldJniTest,链接时使用到的库,对应android.mk文件中的LOCAL_LDLIBS,及最终输出指定三种abi体系结构下的so库。
添加后如下图:
这时,再执行"Build->Rebuild Project",就可以编译出so文件了。
编译出来的库文件被Studio输出到了下图的路径中
Step: 6.安装运行
界面:
查看Log打印:
到这里就结束啦~
我根据自己的实践,对该引用的文章做了一些修改(另:由于我的Android Studio版本比较新,所以引用的文章中的bug在我这里没有出现)
本人AndroidStudio版本:2.1,查看方式如下:
使用Android Sutdio创建一个新的工程后,接下来记录创建NDK工程的基本步骤。
本文将达到:
1. 创建NDK工程
2. 在JNI中输出Log语句
3. 指定编译的so库的abi版本
4. 解决在创建NDK工程中的问题
Step: 1. 添加native接口
注意写好native接口和System.loadLibrary()即可了,并无特别之处。
P.S:onCreate()中对R.id.txt执行setText(),所以这里需要对xml布局文件按正常的开发步骤进行修改即可。
直接给出代码如下:
public class HelloWorldActivity extends Activity { private native String getStringFromNative(); static { System.loadLibrary("HelloWorldJniTest"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView jniContent = (TextView) findViewById(R.id.jni_content); jniContent.setText(getStringFromNative()); } }
Step: 2.执行Build->Make Project
这一步骤执行一下,验证工程中并无其它错误,并对工程进行了编译,生成了.class文件.
.class文件的生成路径是在 app/build/intermediates/classes/debug下的.如下图:
Step: 3.javah生成c头文件
(注意:执行此步骤的前提是AndroidStudio已经安装了NDK,若尚未安装,在Step5中有安装说明。。)
点击"View->Tool Windows->Terminal",即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件。
这里需要注意的是要进入 <Project>\app\src\main的目录下执行javah命令,为的是生成的 .h 文件同样是在<Project>\app\src\main路径下,可以在Studio的工程结构中直接看到。
操作命令:
javah -d jni -classpath <SDK_android.jar>;<APP_classes> com.bupt.XXX.myapplication.HelloWorldActivity
具体操作图如下:
先cd到src/main目录下,然后执行:
javah -d jni -classpath D:\android_studio\sdk\platforms\android-23\android.jar;..\..\build\intermediates\classes\debug c om.bupt.zhaoyanmei.myapplication.HelloWorldActivity如图:
最后的生成结果:
Step: 4.编辑c文件
在helloworld.c文件中实现头文件中的方法,具体功能为直接return回一个String,并且使用android_log打印出相关日志。
代码如下:
// // Created by XXX on 2016/4/12. // /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> #include <android/log.h> #ifndef LOG_TAG #define LOG_TAG "ANDROID_LAB" #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) #endif /* Header for class com_bupt_XXX_myapplication_HelloWorldActivity */ #ifndef _Included_com_bupt_XXX_myapplication_HelloWorldActivity #define _Included_com_bupt_XXX_myapplication_HelloWorldActivity #ifdef __cplusplus extern "C" { #endif /* * Class: com_bupt_XXX_myapplication_HelloWorldActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_bupt_XXX_myapplication_HelloWorldActivity_getStringFromNative (JNIEnv * env, jobject jObj) { LOGE("log string from ndk."); return (*env)->NewStringUTF(env,"This is My First JNI project -- Hello World!"); } #ifdef __cplusplus } #endif #endif
到这里后,我们再执行一个"Build->Make Project",发现"Messages Gradle Build"会给出提示如下:
[java] view
plain copy
Error:Execution failed for task ':app:compileDebugNdk'.
> NDK not configured.
Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.
(On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk)
这里提示了NDK未配置,并且需要在工程中的local.properties文件中配置NDK路径。好了,提示很清楚了,那我们就进入下一步吧。
Step: 5.安装配置NDK
这一步包括两个动作:
1.安装:
2.指明ndk路径
2. 修改build.gradle配置
工程中共有两个build.gradle配置文件,我们要修改的是在<Project>\app\build.gradle这个文件。为其在defaultConfig分支中增加上
ndk { moduleName "HelloWorldJniTest" ldLibs "log", "z", "m" abiFilters "armeabi", "armeabi-v7a", "x86" }
以上配置代码指定的so库名称为HelloWorldJniTest,链接时使用到的库,对应android.mk文件中的LOCAL_LDLIBS,及最终输出指定三种abi体系结构下的so库。
添加后如下图:
这时,再执行"Build->Rebuild Project",就可以编译出so文件了。
编译出来的库文件被Studio输出到了下图的路径中
Step: 6.安装运行
界面:
查看Log打印:
到这里就结束啦~
相关文章推荐
- Android 如何判断一个应用在运行
- android jni编译配置DEBUG or RELEASE 的方法和优先级
- Android实现圆角边框
- AndroidStudio统计代码行数
- Android自定义View的官方套路
- 一起来学习Android自定义控件1
- android 读取,清除缓存通用于所有手机 解决空指针
- Android 混淆代码总结
- Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
- Android Studio ADB响应失败解决方法(2CTo.com)
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- 在Android中通过Java修改文件权限
- android基础再学习---如何保证Service不被杀掉
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
- Android Studio快捷键
- android重新启动应用程序和重新启动系统 .
- Android Studio真机测试安装时报解析错误
- SVN branch Merge的操作
- Android GestureOverlayView详解
- Android 带清除功能的输入框控件ClearEditTex