本文接着上一篇超级简单的Android Studio jni 实现(无需命令行)的实现,来继续了解官方的另一种实验性的自动化NDK实现。

1.首先新建一个Android工程Gradle_Experimental_NDK,我们打开Gradle_Experimental_NDK/gradle/wrapper下的gradle-wrapper.properties文件,进行如下配置:

distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
Paste_Image.png

2.打开Gradle_Experimental_NDK目录下的build.gradle文件,如下图进行配置:

classpath "com.android.tools.build:gradle-experimental:0.6.0-beta5"
Paste_Image.png

3.打开app目录下的build.gradle,进行配置,如下图:

Paste_Image.png
apply plugin: 'com.android.model.application'model {    android {        compileSdkVersion = 23        buildToolsVersion = "23.0.2"        defaultConfig.with {            applicationId = "com.zhangyp.higo.gradle_experimental_ndk"            minSdkVersion.apiLevel = 7            targetSdkVersion.apiLevel = 23        }    }    android.ndk {        moduleName = "MyLibrary"        /*         * Other ndk flags configurable here are         * cppFlags.add("-fno-rtti")         * cppFlags.add("-fno-exceptions")         * ldLibs.addAll(["android", "log"])         * stl       = "system"         */    }    android.buildTypes {        release {            minifyEnabled = false            proguardFiles.add(file('proguard-rules.txt'))        }    }    android.productFlavors {        create("arm") {            ndk.abiFilters.add("armeabi")        }        create("arm7") {            ndk.abiFilters.add("armeabi-v7a")        }        create("arm8") {            ndk.abiFilters.add("arm64-v8a")        }        create("x86") {            ndk.abiFilters.add("x86")        }        create("x86-64") {            ndk.abiFilters.add("x86_64")        }        create("mips") {            ndk.abiFilters.add("mips")        }        create("mips-64") {            ndk.abiFilters.add("mips64")        }        // To include all cpu architectures, leaves abiFilters empty        create("all")    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:23.1.1'}

4.创建jni目录,注意在app目录上右击鼠标,如下图:


Paste_Image.png

5.创建MyNdk.java文件,按照下图的操作就可以自动创建MyLibrary.c文件

/** * Created by zhangyipeng on 16/2/28. */public class MyNdk {    static {        System.loadLibrary("MyLibrary");    }    public native String getString();}
Paste_Image.png

6.MyLibrary.c文件已经创建好了,如下图:


Paste_Image.png

7.我们修改MyLibrary.c,让其返回字符串,代码如下:

#include JNIEXPORT jstring JNICALLJava_com_zhangyp_higo_gradle_1experimental_1ndk_MyNdk_getString(JNIEnv *env, jobject instance) {    // 我们随便返回字符串,验证    return (*env)->NewStringUTF(env, "Hello zzyyppqq !!!");}

8.在MainActivity.java中调用,如下图

public class MainActivity extends AppCompatActivity {   @Override   protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.activity_main);       TextView tv = (TextView) findViewById(R.id.tv);       tv.setText(new MyNdk().getString());   }}
Paste_Image.png

9.点击run就可以顺利运行了,手机运行图如下

Paste_Image.png

10.使用gradle-experimental构建ndk,比以前简单多了,我们对比一下,我觉得最大的好处是Android.mk、Application.mk这两个文件再也不用写了,好开心_

Paste_Image.png

so文件所在位置:


Paste_Image.png

11.版本对应关系截图


Paste_Image.png

12.后记:Android Studio 2.0 Beta6 ,gradle 版本2.10-all , gradle-experimental版本0.6.0-beta5。请确保gradle版本与gradle-experimental是这两个版本。教程的build.gradle都是最简单的版本, 方便大家去了解。

13.如果需要使用Android Studio调试c/c++请看这篇文章:Android Studio NDk调试(基于gradle-experimental插件与LLDB)

14.相关资料阅读
gradle-experimental相关的博客
gradle-experimental原网站

更多相关文章

  1. Android(安卓)Window理解(3.1)---子窗口创建过程:Dialog、PopupWind
  2. [原] Android上使用native IO
  3. android_对话框
  4. SharedPerferences的使用
  5. android 抓包实际应用
  6. 【android】为PopupWindow设置动画效果
  7. Android启动找不到activity问题
  8. android 创建service root权限执行脚本
  9. android几种数据存储方式

随机推荐

  1. 使用GROUP BY,ORDER BY进行PDO查询构造
  2. mysql免安装版简单使用步骤
  3. 如何在MySQL中得到两个值的最大值?
  4. mysql replace into 的使用情况
  5. Centos设置开机启动Apache和Mysql[总结]
  6. MySQL添加外键错误1215
  7. 如何在执行bash查询时,获得受影响的行数?
  8. SQL查询结果区分大小写
  9. 关于淘宝的数据库系统
  10. 如何将空值传递给外键字段?