Mac电脑AndroidStudio2.2使用NDK开发JNI

好久没有搞JNI了,听说AndroidStudio可以调试C++了,今天把JNI开发再熟悉下。

在AndroidStudio中可以直接下载JNI开发的相关NDK和工具,不需要单独下载NDK了。

153417_9XAw_2698012.png

这样,编译JNI有两种方式,ndk-build和CMake

一、ndk-build方式

1. 新建Project

2. 创建Java类,添加本地方法

public class HelloJni {
    static {
        System.loadLibrary("hello-jni");
    }
    public static native String getJniString();

}

3. 选择[build]->[Make Project]生成class

4. 使用javah命令生成.h文件

// 命令行进入
cd app/src/main
// 在src/main下生成jin文件夹和.h文件
javah -d jni -classpath ./java com.outman.myjni.HelloJni

5. 生成的com_outman_myjni_HelloJni.h文件如下

默认有2个参数,重点说下第二个参数

jclass java代码方法,是static类型的,则生成的是jclass类型参数

jobject java代码方法,是非static类型的,则生成的是jobject类型参数

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_outman_myjni_HelloJni */

#ifndef _Included_com_outman_myjni_HelloJni
#define _Included_com_outman_myjni_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_outman_myjni_HelloJni
 * Method:    getJniString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_outman_myjni_HelloJni_getJniString
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

6. 在jni文件夹中创建cpp文件

#include <jni.h>
#include <com_outman_myjni_HelloJni.h>

JNIEXPORT jstring JNICALL Java_com_outman_myjni_HelloJni_getJniString
  (JNIEnv *env, jclass obj) {

    char *result = "this is call from JNI C++";
    jstring jstr = env->NewStringUTF(result);
    return jstr;
}

7. 在jni文件夹创建Android.mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_C_INCLUDES+= $(LOCAL_PATH)
SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)
SRC_FILES := $(SRC_FILES:$(LOCAL_PATH)/%=%)

LOCAL_SRC_FILES := $(SRC_FILES)

#LOCAL_LDLIBS    := -llog -landroid
LOCAL_LDLIBS    := -llog

include $(BUILD_SHARED_LIBRARY)

8. [build]->[Make Project]编译工程

如果未安装XCode,会弹窗要求安装,安装即可

9. 配置gradle支持

有种简单方法,就是通过AndroidStudio Link C++功能

选中Android.mk -> File -> Link C++ 选择ndk-build,并选择工程中的Android.mk文件

10. 完成后,会在build.gradle中生成ndk支持

android {
    defaultConfig {
        ndk{
            moduleName "hello-jni"
            abiFilters "armeabi"
        }
    }
    externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
    }
}

11. gradle.properties中添加支持

android.useDeprecatedNdk=true

12. 完成以上,build工程即可生成.so文件

不过要注意,so没有生成在lib下,而是在

app->build->intermediates->ndkBuild

但不影响使用

二、CMake方式

1. 下载完成插件后,新建Project时,选中Include C++ Support即可

2. 生成的Project会自动生成Demo,就不详细介绍了。

三、ndk-build和CMake的一点区别

主要是配置的不同,不再详细描述,可以参考另一篇转载的文章。

https://my.oschina.net/android520/blog/805249

转载于:https://my.oschina.net/android520/blog/805243

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值