使用Android Studio 1.3 版本进行NDK开发
2015-07-30 18:07
736 查看
众所周知Android Studio 1.3 版本新增了NDK支持,能够很方便的在上面开发C++或者C代码了,可是预览版功能不是非常完善,需要很多步骤,还有一些奇怪的BUG,整了半天终于可以使用Android Studio完美进行NDK开发了.先看下效果图:
有些人可能会遇到问题:自己版本低于1.3检查更新却提示已经是最新版本?
那是因为更新渠道不是Beta渠道,需要先将渠道设置为Beta渠道才能更新到1.3:
然后重新检查更新就可以更新到1.3了.
Google原文链接:http://tools.android.com/tech-docs/new-build-system/gradle-experimental
1.将Gradle更新到2.5版本.
在这里将GradleVersion改为2.5 点击OK键就会开始自动更新Gradle了.
2.Android NDK r10e ,将NDK更新到这个版本
3.BuildTools版本要求大于19.0.0
4.红色标注的3个文件是需要手动修改的文件.
5.修改gradle-wrapper.properties文件内容为如下:
6.修改Project(非Module)下的Gradle文件,将gradle版本改为实验版本(红色标注部分):
(classpath ‘com.android.tools.build:gradle-experimental:0.1.0’)
7.修改Module下的Gradle文件(新版Gradle语法有了很大的改变,红色标注为需要修改的部分,注意dependencies在model外面):
在android{}外面要使用model{}来包括了,所有赋值都变为了=号,新增项变为了+=,buildTypes{},productFlavors{}和sources{}挪到了android{}外面.
再上一份我的Module的配置:
实验版Gradle在某些机子上可能会有BUG,如果编译的时候报了如下错误,需要在android{}中添加tasks.withType指定较低的JDK编译版本(1.6或1.7):
bad class file magic (cafebabe) or version
最后在local.properties文件中指定NDK目录即可愉快的进行NDK开发啦:
ndk.dir=”你的NDK目录”
ldLibs项相当于Android.mk中的LOCAL_LDLIBS参数.
abiFilters相当于Application.mk中的APP_ABI参数.
2.在Main文件夹下新建JNI文件夹(默认目录,如需修改可以在Gradle中指定 jni.srcDirs)
3.定义JNI java类:
4.使用javah命令生成头文件(不生成头文件也可,当C++中没有方法实现时,方法名为红色,直接在方法上alt+enter 选择create XXXX 就可以自动在C++文件中生成方法,很方便啊):
打开cmd,cd到java目录下,使用命令:
javah com.example.stronghope.jnitest.JNI
生成头文件,将头文件剪切到jni目录下.
自动生成方法:
5.在jni目录下新建C++文件:
JniTest.cpp
6.引入头文件,编写C++代码:
7.运行Android项目,在控制台得到如下输出:
好啦一个简单的Jni程序就实现了,使用Android Studio来进行NDK开发真的非常方便!坐等release版本出来o(∩_∩)o
方法:
一.首先将Android Studio更新到1.3版本:
1.检查Android Studio更新.有些人可能会遇到问题:自己版本低于1.3检查更新却提示已经是最新版本?
那是因为更新渠道不是Beta渠道,需要先将渠道设置为Beta渠道才能更新到1.3:
然后重新检查更新就可以更新到1.3了.
二.将gradle切换到实验版本.
根据Google官方提供的方法修改Gradle文件.(官方说法为测试版本不完善,需要手动修改Gradle文件以便兼容Gradle实验版,他们会在release版本中实现程序自动修改Gradle)Google原文链接:http://tools.android.com/tech-docs/new-build-system/gradle-experimental
1.将Gradle更新到2.5版本.
在这里将GradleVersion改为2.5 点击OK键就会开始自动更新Gradle了.
2.Android NDK r10e ,将NDK更新到这个版本
3.BuildTools版本要求大于19.0.0
4.红色标注的3个文件是需要手动修改的文件.
5.修改gradle-wrapper.properties文件内容为如下:
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
6.修改Project(非Module)下的Gradle文件,将gradle版本改为实验版本(红色标注部分):
(classpath ‘com.android.tools.build:gradle-experimental:0.1.0’)
7.修改Module下的Gradle文件(新版Gradle语法有了很大的改变,红色标注为需要修改的部分,注意dependencies在model外面):
在android{}外面要使用model{}来包括了,所有赋值都变为了=号,新增项变为了+=,buildTypes{},productFlavors{}和sources{}挪到了android{}外面.
再上一份我的Module的配置:
apply plugin: 'com.android.model.application' model{ android { compileSdkVersion=19 buildToolsVersion="22.0.0" defaultConfig.with { applicationId = "com.example.stronghope.jnitest" minSdkVersion.apiLevel = 9 targetSdkVersion.apiLevel = 19 versionCode = 1 versionName = "1.0" } tasks.withType(JavaCompile) { //指定编译JDK版本 sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 } } android.ndk { moduleName="JniTest" ldLibs +="log" ldLibs += "z" ldLibs += "m" abiFilters +="armeabi" abiFilters +="armeabi-v7a" abiFilters +="x86" } android.buildTypes { release { // isMinifyEnabled = false // proguardFiles += file('proguard-rules.pro') } } } dependencies { }
实验版Gradle在某些机子上可能会有BUG,如果编译的时候报了如下错误,需要在android{}中添加tasks.withType指定较低的JDK编译版本(1.6或1.7):
bad class file magic (cafebabe) or version
最后在local.properties文件中指定NDK目录即可愉快的进行NDK开发啦:
ndk.dir=”你的NDK目录”
三.NDK开发
1.配置Gradle中ndk编译参数(只需要在Gradle中配置,就可以完全脱离书写Android.mk和Application.mk文件来编译啦):ldLibs项相当于Android.mk中的LOCAL_LDLIBS参数.
abiFilters相当于Application.mk中的APP_ABI参数.
2.在Main文件夹下新建JNI文件夹(默认目录,如需修改可以在Gradle中指定 jni.srcDirs)
3.定义JNI java类:
public class JNI { static{ System.loadLibrary("JniTest"); } public static native void testLog(); }
4.使用javah命令生成头文件(不生成头文件也可,当C++中没有方法实现时,方法名为红色,直接在方法上alt+enter 选择create XXXX 就可以自动在C++文件中生成方法,很方便啊):
打开cmd,cd到java目录下,使用命令:
javah com.example.stronghope.jnitest.JNI
生成头文件,将头文件剪切到jni目录下.
自动生成方法:
5.在jni目录下新建C++文件:
JniTest.cpp
6.引入头文件,编写C++代码:
7.运行Android项目,在控制台得到如下输出:
好啦一个简单的Jni程序就实现了,使用Android Studio来进行NDK开发真的非常方便!坐等release版本出来o(∩_∩)o
相关文章推荐
- 当启动多个Activity后从最后一个activiy越级返回方法
- 分析android动画模块
- Android 日志级别总结
- Android中loader的学习:
- com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice
- Android启动过程学习总结
- Android禁止ViewPager的左右滑动
- xml布局内容总结(三)--Android
- Android重启应用程序代码
- Android中读图片Exif信息的方法
- Android 布局 精准定位 平衡定位 相对定位
- FATAL EXCEPTION: GLThread
- androidの更改个人资料性别弹出框案例
- android SurfaceView详解
- Android AIDL使用特定的解释
- android acitvity跳转有白色背景 进入软件显示白色
- Android:手机关闭相机拍照声音
- android按两次返回键退出
- android如何从应用程序进入设置的各个页面
- Android实例-消息框(XE8+小米2)