开发环境:

Android studio2.0
ndk r10 64位

准备工作:

NDK下载地址:http://www.cnblogs.com/yaotong/archive/2011/01/25/1943615.html
Android Studio下载地址:http://www.android-studio.org/
新建Android工程;
配置ndk路径,File>Project Structure
工程目录:
QQ截图20160816114035.jpg

步骤一:

打开File>Settings>Tools>External Tools
点击“加号”添加javah命令行,如图:


步骤二:

创建JniTest.class,代码如下

/*** Created by h0nes1pr09rammer on 2016/8/16.*/public classJniTest {static{System.loadLibrary("jni-test");}public static nativeStringgetStrFromJni();}

步骤三:

在main目录下新建jni目录,右键JniTest.class,选中NDK>javah,jni中生成“包名_JniTest.h”

步骤四:

编写jni-test.c,代码如下:

#include"com_ctwl_lzq_hellojnidemo_JniTest.h"JNIEXPORT jstring JNICALL Java_com_ctwl_lzq_hellojnidemo_JniTest_getStrFromJni(JNIEnv * env,jobject obj){char* cstr ="jni test";return(*env)->NewStringUTF(env,cstr);}

步骤五:

配置app下build.gradle,添加如下配置

buildTypes {release {...ndk{moduleName"jni-test"//生成的so名字abiFilters"armeabi","armeabi-v7a","x86"//输出指定三种abi体系结构下的so库。}}debug{ndk{moduleName"jni-test"//生成的so名字abiFilters"armeabi","armeabi-v7a","x86"//输出指定三种abi体系结构下的so库。}}}

makeproject,在app>build>intermediates>ndk下生成对应的.so文件。

步骤六:

修改MainActivity.class代码,如下:

public classMainActivityextendsAppCompatActivity {@Overrideprotected voidonCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  TextView textView = (TextView) findViewById(R.id.tv);  JniTest jniTest =newJniTest();  textView.setText(jniTest.getStrFromJni());  }}

运行。

报错:

Error:Execution failed for task ':app:compileDebugNdk'.

Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.
Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.

解决办法:

在gradle.properties中添加

android.useDeprecatedNdk=true

报错:

Error:Execution failed for task ':app:compileDebugNdk'.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: ... finished with non-zero exit value 2

解决办法:

在jni目录下新建空的.c文件,比如"empty.c"(具体原因自行google)。

报错:

java.lang.UnsatisfiedLinkError

解决办法:

在gradle中指定jniLibs路径,示例如下(根据自己的实际路径配置):

sourceSets {    main {        manifest.srcFile 'AndroidManifest.xml'        java.srcDirs = ['src']        resources.srcDirs = ['src']        aidl.srcDirs = ['src']        renderscript.srcDirs = ['src']        res.srcDirs = ['res']        assets.srcDirs = ['assets']        jniLibs.srcDirs = ['libs']    }

更多相关文章

  1. Android(安卓)新建文件夹、生成文件并向文件写入文本内容
  2. 译:Android(安卓)N不再支持通过Intent传递“file://”scheme
  3. Android(安卓)Intent 用法汇总
  4. uiautomatorviewer.bat的使用
  5. android获取应用基本信息
  6. Android(安卓)Intent调用 Uri的使用几种格式
  7. Android(安卓)文件下载三种基本方式
  8. android 模拟器常用命令
  9. Android(安卓)6编译环境搭建 (Marshmallow)

随机推荐

  1. Android(安卓)如何使用GPU硬件加速
  2. Android(安卓)动态logo bootanimation.zi
  3. Android(安卓)的相关文件类型
  4. android Wifi自动连接
  5. View动画
  6. Android——textView
  7. Android中设置控件可见与不可见详解
  8. android app 启动会白屏的解决办法
  9. unity与Android相互调用
  10. 【Android】TextView常用属性