本篇入门教程开发环境为mac + Android Studio + gradle 2.14.1,主要包含以下3块内容:
NDK环境搭建
编写第一个JNI项目
打包出动态so文件,在其他项目中使用
一、NDK环境搭建
从Android Studio安装
打开AndroidStudio,选择顶部工具条,Tools->Android->SDK Manager->SDK Tools->NDK 点击install自行下载ndk包
1)国内推荐通过 AndroidDevTools镜像 下载,或者Google的官方网站下载Android NDK的安装包 https://developer.android.com/ndk/downloads/index.html
NDK r13b
2)下载ndk包后解析到某个路径,打开Project Structure->设置 NDK location
AndroidDevTools 下载
ndk环境变量配置,我们需要使用到ndk-build命令
打开终端 -> 输入 :vim ~/.bash_profile -> 加入ndk 包的路径(mac中环境变量之间以封号隔开)
自此,ndk开发环境我们已经可以进行jni开发了
二、JNI开发
创建android项目
查看项目local.properties中加入ndk和sdk的路径是否正确
ndk.dir=/Users/userName/AndroidStudioProjects/ndk/android-ndk-r13b sdk.dir=/Users/userName/Library/Android/sdk
配置项目下的gradle.properties文件,表示我们要使用NDK进行开发。
android.useDeprecatedNdk=true
在moudle根目录下的的build.gradle中的defaultConfig标签内部里加入如下代码
ndk{ moduleName "hello" //生成的so文件名字,调用C程序的代码中会用到该名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种平台下的so库,// 还可以添加 'x86_64', 'mips', 'mips64'}
编写jni代码
package com.david.ndktest; -public class MainActivity extends AppCompatActivity { //使用静态代码块,表示我们要加载的资源文件为libsecret.so static { System.loadLibrary("secret"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv_msg = (TextView) findViewById(R.id.tv_msg); tv_msg.setText(stringFromat()); } //声明一个本地方法,用native关键字修饰 public native String stringFromat(); }
生成.h头文件
直接使用Android Studio 底部的Terminal,默认命令行窗口路径已经在当前项目,进入到app/src/main/java目录,输入以下命令(固定格式:javah -jni 包名+类名)
javah -jni com.david.ndktest.MainActivity
为在对应包的根目录下生成.h文件,熟悉该函数名后,日常开发中可以不用生成.h文件
生成头文件
执行第5部的时候,