[Android10]JNI添加及编译为so库,在系统里实现的例子

本文详细介绍了如何使用JNI技术在Java中调用本地C++代码,包括创建本地函数、编译Java源文件、实现头文件中的native方法、编写Android.mk并编译so库,以及在Java中加载so库的完整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现思路
1.创建一个可供java 代码调用的本地函数
2.将需要实现本地实现的java代码加上native声明
3.使用javac -h xxx1 xxx2 编译java类,xxx1是生成.h文件的目录(若无此目录,则自动新建),xxx2是需要编译的java源文件,同目录下生成xx.class,xx是类名
4.新建cpp文件,实现生成的.h中的native方法
5.编写Android.mk,使用mm命令,编译该jni模块为so库
6.在java类中加载此so库
二、源码如下sdk/device/rockchip/apps/jni_demo/
1.新建/src/com/android/JniDemo.java

/*TestJNI*/
package com.android.jnidemo;
class TestJNI
{
	public static native String helloWorld();
	static
	{
		System.loadLibrary("ananjni");//
	}
	public static void main(String args[]){
		TestJNI hello = new TestJNI();
		hello.helloWorld();
	}
}

2.命令输入javac -h …/…/…/jni/include/ JniDemo.java,同目录下生成TestJNI.class,jni_demo目录下生成了jni/include/com_android_jnidemo_TestJNI.h文件如下:

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

#ifndef _Included_com_android_jnidemo_TestJNI
#define _Included_com_android_jnidemo_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_android_jnidemo_TestJNI
 * Method:    helloWorld
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_android_jnidemo_TestJNI_helloWorld
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

3.在jni目录下新建cpp文件anan_jni_lib.cpp,实现native方法

#include <stdio.h>
#include <string>
#include "include/com_android_jnidemo_TestJNI.h"
using namespace std;
JNIEXPORT jstring JNICALL 
Java_com_android_jnidemo_TestJNI_helloWorld(
JNIEnv *env, jclass jobj){
	string hello = "Hello world 是jni调用的字符串";
	return env->NewStringUTF(hello.c_str());
}

4.在jni目录下编写Android.mk,并编译so库

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
MY_CPP_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
MY_CPP_LIST := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES := $(MY_CPP_LIST)
LOCAL_MODULE := libananjni
include $(BUILD_SHARED_LIBRARY) #此处注意应该是BUILD_SHARED_LIBRARY

在学习中进步,如有错误,请多多批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodeAmmon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值