【android ndk】macos环境下Android Studio中利用gradle编译jni

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模块依赖

一路走来,我们无法猜测将是迎接什么样的风景,

【android ndk】macos环境下Android Studio中利用gradle编译jni

相关文章:

你感兴趣的文章:

标签云: