Android JNI开发 (Android.mk版)

Native Develop Kit,是Android 的一部分,与Java无直接关系

androidstudio2.2开始支持的比较老的方式,主要依赖于配置文件Android.mk与Application.mk

一、首先新建空白AndroidStudio工程

新建空白androidstudio工程,定义jni方法如下

public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("jni_demo");
    }

    public native String getStringFromC();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toast.makeText(this, new MainActivity().getStringFromC(), Toast.LENGTH_SHORT).show();
    }
}

二、使用javah生成头文件

移动头文件到app/jni目录下

cd app/src/main/java
javah com.hs.androidjnidemo.MainActivity

新建jni_demo.cpp或者jni_demo.c,名称与System.loadLibrary保持一致

Jni_demo.cpp内容如下

注意:cpp的NewStringUTF入参只有一个,同时env不需要*env

#include "com_hs_androidjnidemo_MainActivity.h"
#include "jni.h"
#include <stdio.h>

JNIEXPORT jstring JNICALL Java_com_hs_androidjnidemo_MainActivity_getStringFromC (JNIEnv *env, jobject obj) {
    return env->NewStringUTF("string from cpp");
}

Jni_demo.c内容如下

#include "com_hs_androidjnidemo_MainActivity.h"
#include "jni.h"
#include <stdio.h>

JNIEXPORT jstring JNICALL Java_com_hs_androidjnidemo_MainActivity_getStringFromC (JNIEnv *env, jobject obj) {
    return (*env)->NewStringUTF(env,"string from c");
}

三、配置ndk开发环境

local.properties配置ndk路径

ndk.dir=/Users/zhanglei/Library/Android/sdk/ndk/22.0.7026061

app/build.gradle/android中配置ndk加载libs

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

四、配置ndk-build编译环境

4.1、Android.mk

新建Android.mk,注意入口文件jni_demo.cpp保持一致

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := jni_demo
LOCAL_SRC_FILES := jni_demo.cpp

include $(BUILD_SHARED_LIBRARY)

调用my-dir函数,返回Android.mk文件所在的目录
LOCAL_PATH := $(call my-dir) 放在第一行,地址当前所在目录
include file Makefile可以引入其他的Makefile文件
include $(CLEAR_VARS) 编译模块时,清空LOCAL_MODULE等参数
LOCAL_MODULE 模块名称
LOCAL_SRC_FILES 编译需要的源文件
LOCAL_C_INCLUDES 需要的头文件
LOCAL_SHARED_LIBRARIES 编译需要的动态库

4.2、Application.mk

新建Application.mk

APP_PLATFORM := android-14
APP_ABI :=all

五、编译生成so

cd到jni入口目录,执行

ndk-build

执行结果如下。其中obj文件夹可以删除

点击运行成功如下

demo地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流星雨在线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值