0 写在开头
Android Studio 0.4.2 使用gradle对jni中的代码进行自动编译,很方便,推荐大家使用,下面是我总结的入门教程,包括了模块的配置
1 环境
IDE: Android Studio 0.4.2
SDK:api-19
NDK:android-ndk-r9d(必须是9以上的,我下载的是最新的)
系统:macos
2 新建android项目
那么这一步中ModuleName我没有修改,是默认的app,里面放的是Activity
创建后的项目结构如下图所示
JNIDemo是整个大项目,下面有app模块。
JNIDemo项目有一个根的build.gradle,
app模块内也有一个build.gradle,就是这个模块的编译配置
3 新建个hellojni模块
因为android studio是以模块为概念的,每个模块类似个library
我们新建一个hellojni模块
如下图所示,右击JNIDemo,选择new – Module – Android Library
修改module name为hellojni,勾掉create activity
现在项目有2个模块了
4 创建.h文件
首先在app模块内的MainActivity.java内添加native方法
public class MainActivity extends ActionBarActivity {public native String hellojni();}然后在hellojni模块根目录下新建一个autojavah.sh
内容如下,
其中TargetClassName为MainActivity的完整名
SourceFile为app模块java源代码根目录
TargetPath为hellojni模块jni根目录
#!/bin/sh export ProjectPath=$(cd "../$(dirname "$1")"; pwd)export TargetClassName="com.ashqal.jni.MainActivity"export SourceFile="${ProjectPath}/app/src/main/java"export TargetPath="${ProjectPath}/hellojni/src/main/jni"cd "${SourceFile}"javah -d ${TargetPath} -classpath "${SourceFile}" "${TargetClassName}"echo -d ${TargetPath} -classpath "${SourceFile}" "${TargetClassName}"右击autojavah.sh,点run,即可运行生成.h文件
当然需要注意得是,你得提前装个Bash Plugin,创建.sh文件时会自动提醒
运行完后,.h文件就自动生成了
5 新建cpp文件
在hellojni模块jni文件夹内新建hellojni.cpp
#include "com_ashqal_jni_MainActivity.h"JNIEXPORT jstring JNICALL Java_com_ashqal_jni_MainActivity_hellojni (JNIEnv* env, jobject obj){return env->NewStringUTF( "Hello from JNI ! Compiled with ABI .");}示例修改自ndk samples hellojni
6 配置ndk环境
在项目JNIDemo内找到local.properties
接着添加
ndk.dir=/programes/android-ndk-r9d
7 编译hellojni模块
编译hellojni模块很简单,就是按command+b,当然右击hellojni模块,选择make module也行
编译后就在hellojni/build/ndk中生成了如下图所示文件,obj/local/内是4个不同的target,已经生成了.so文件了
模块名叫hellojni,是自动生成的Android.mk文件,下面会提到如何修改默认的module name,如何配置编译依赖库
8配置app模块,使之依赖hellojni
选择app模块,右击选择open-module-setting,打开项目结构
一次点击下图所示未知,给app模块添加hellojni模块依赖
一路走来,我们无法猜测将是迎接什么样的风景,