一、编译环境

1. 安装ndk

首先把ndk安装好,比较简便的方法是通过android studio的SDK manager来安装,上图。

把NDK方框勾选上。

2. 配置ndk location

这一步告诉ndk-build在哪里,

在File选项卡中选择Project Structure,

在Android NDK location那里设置你的ndk路径。

设置好之后,local.properties文件中看到如下内容说明设置成功。

然后在在gradle.properties的文件末尾加上android.useDeprecatedNdk=true,ndk的配置才算完成。

二、java及c代码编写

1. java代码编写

举例说明,在src/main/java包下面新建一个java类JNITest.java,里面写一个简单的函数(java调C中的方法都需要用native声明且方法名必须和c的方法名一样)。

package com.example.tongjing.myapplication;public class JNITest {    public native String getStringFromC();}

然后选择build选项卡中的make project,会在工程目录下的\build\intermediates、classes\debug\com\example\tongjing\myapplication中看到自己编译后的class文件JNITest.class如下图所示:

2. 生成.h文件

首先打开android studio的Terminal命令行工具,打开步骤是View->Tool Windows->Terminal。

在命令行中进入工程的main目录下,执行命令:

javah -d jni -classpath E:\code\Android\app\build\intermediates\classes\debug com.example.tongjing.myapplication.JNITest

之后就会在main目录下生成jni文件夹,同时生成.h文件。

如果觉得这个文件名太长了,可以自己修改,文件里的内容不要修改。我把名字改成了JNITest.h。

3.编写cpp文件

同样在jni文件夹下新建一个名为JNITest.cpp的文件,内容如下:

其中方法名要和.h文件中保持一致。

完成之后在MainActivity中调用一下。

首先import这个类,然后调用。

package com.example.tongjing.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;import com.example.tongjing.myapplication.JNITest;public class MainActivity extends AppCompatActivity {    // Used to load the 'native-lib' library on application startup.    static {        System.loadLibrary("JNITest");JNITest");
    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // Example of a call to a native method        TextView tv = (TextView) findViewById(R.id.sample_text);        tv.setText(new JNITest().getStringFromC());    }}

4. 编译配置

在build.gradle文件的android下的defaultConfig配置块内加入以下内容。

在jni目录下创建Android.mk文件,内容如下:

创建Application.mk,内容如下:

这里的APP_ABI的是目标平台,all代表所有平台,也可以指定特定平台。

在Terminal中执行ndk-build,就可以编译生成so库了。

生成的so文件都在src/main/libs目录下。

最后的结果。

更多相关文章

  1. Android(安卓)eclipse - aapt.exe has stopped working.
  2. Android(安卓)学习笔记4---签名Android的执行文件
  3. Android调试工具adb的高逼格使用方式
  4. Android中的控件
  5. Android工程中R.java文件的重新生成——注意资源文件的错误
  6. Android(安卓)资源,国际化,自适应
  7. 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程
  8. Gradle in Android(安卓)Studio (1) - 构建系统概述
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)判断App运行在模拟器还是真
  2. Android(安卓)学习项目开发案例
  3. [置顶] Android(安卓)设置铃声分析
  4. android : 修改frameworks/base/ 代码需
  5. Android(安卓)retrofit2+OkHttp3的初尝试
  6. Android自定义Button按钮显示样式
  7. Android(安卓)okHttp 实战(三):okHttp网络请
  8. Android开发系列之搭建开发环境
  9. Android(安卓)NDK 原理
  10. Android(安卓)suspend底层流程解析