众所周知Android Studio 1.3 版本号新增了NDK支持,能够非常方便的在上面开发C++或者C代码了,但是预览版功能不是非常完好,须要非常多步骤,另一些奇怪的BUG,整了半天最终能够使用Android Studio完美进行NDK开发了.先看下效果图:

方法:

一.首先将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

使用Android Studio 1.3 版本号进行NDK开发的更多相关文章

  1. Android Studio && GitHub 团队多人一起开发

    曾几何时,花了两天的时间搞了合并项目,搞得乱七八糟der,但最终还是被我搞定了,too 乱 to 做笔记.过了几个月,也就是前几天,抱着从头开始的决心,再次尝试,然鹅并没有结果.今天,再一次重新开始, ...

  2. 【Android Studio安装部署系列】二十三、Android studio查看Gradle版本号

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 File——Project Structure 单击Project 可以看到,当前项目的gradle版本号是4.4. 参考资料 An ...

  3. Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库

    Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16. step1:创建一个包含C++的项目 其他默认就可以了. C++ Standard 指定编译库的环境,其中Too ...

  4. Android Studio配置OpenCV(非NDK)

    参考:http://www.cnblogs.com/tail/p/4618476.html 工具: 1,Android Studio(AS)1.4 2,Opencv 2.4.11 步骤: 1,解压下载 ...

  5. ADT bundle和Eclipse和Android Studio有什么区别?安卓开发该用哪个?

    这三个版本的出现有一定的历史的原因:1.最开始只有eclipse+独立的adt一种开发环境,但是由于eclipe作为一种通用的ide,带来的问题太多,经常出现eclipse的版本不兼容adt的情况,或 ...

  6. 使用Android Studio和Genymotion模拟器搭建Andriod开发环境

    一.Android Studio下载 1.打开http://www.android.com/ 2.依照下图步骤打开下载页面 a.在页脚部分点击“App Developer Resources” b.点 ...

  7. Android Studio 0.4 + PhoneGap 3.3 开发环境的搭建

    最近在尝试HTML5移动平台下的开发 由于安卓的方便性,首先开始了安卓的试验 现在安卓下的开发工具首选 Android Studio (写这文章的时候,是0.4) 而跨平台的HTML5 App比较出名 ...

  8. 如何使用Android Studio在安卓平台对Unity开发的应用进行性能检查?

    0x00 前言 大家常常会抱怨安卓平台没有一个统一.好用的性能检查工具.不能像iOS的instrument那样方便. 图片来自:Instruments Help 比如,Unity Blog在3年前就已 ...

  9. 苹果电脑获取Android Studio的发布版SHA1和开发版SHA1

    最近开始转战安卓,准备把我在苹果上的应用也在安卓上来一波,其中就遇到一个问题就是最牛天气(iOS和微信小程序都已经有了,就差安卓的了)引用的百度的定位功能,需要填写发布版SHA1和开发版SHA1,作为 ...

随机推荐

  1. 93.EXTJS Form之VTypes

    转自:http://blog.sina.com.cn/s/blog_7778950d0100y2pg.html 本文我们主要探讨一下EXTJS的Form中验证的问题,可能用过EXTJS的Form的人都 ...

  2. ul和li里面的list-style

    对ul   list-type  只是设置ul的样式对li    list-type 是对li的综合样式设定  语法是 li-style:list-style-type/list-style-imag ...

  3. [Apple开发者帐户帮助]二、管理你的团队(7)管理服务器帐户

    如果在配置机器人以在多个设备上运行应用程序时向团队添加服务器,允许Xcode Server为您管理签名,或者配置机器人以创建iOS App文件,则服务器可以访问您的资产并显示在您的开发人员帐户 您可以 ...

  4. java.util.concurrent常用类(CountDownLatch,Semaphore,CyclicBarrier,Future)

    CyclicBarrier CyclicBarrier是用来一个关卡来阻挡住所有线程,等所有线程全部执行到关卡处时,再统一执行下一步操作.假设一个场景:每个线程代表一个跑步运动员,当运动员都准备好后, ...

  5. Java并发基础知识点详解

    1.synchronized与Lock区别 父类有synchtonized,子类调用父类的同步方法,是没办法同步的,因为synchronized不是修饰符,不会被继承下来. synchronized ...

  6. 2015 多校赛 第五场 1006 (hdu 5348)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题目大意:给出一幅无向图,问是否存在一种方案,使得给每条边赋予方向后,每个点的入度与出度之差小于 ...

  7. Vue跨域访问,axios&cors

    先安装node.js和npm,这个不用说了,直接在创建vue项目,然后实践一下跨域访问. 如果npm安装较慢,可安装淘宝镜像,执行下面命令: npm install -g cnpm --registr ...

  8. @PathVariable注解的使用和@Requestparam

    一. @PathVariable @PathVariable这是一个路径映射格式的书写方式注解,在类映射路径的后加上/{对应方法参数中属性@PathVariable("code") ...

  9. 复习HTML+CSS(8)

    n  普通框架 框架技术:将一个浏览器划分成若干个小窗口,每个小窗口显示一个独立的网页. 框架集合框架页 u  框架集<frameset>:主要用来划分窗口的. u  框架页<fra ...

  10. javascript执行环境及作用域

    执行环境(execution context,为简单起见,有时也成为“环境”)是javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境 ...