Android framework層自定義jni
framework新增自定jni 本文章適用於在原始碼環境下在framework新增自定的jni供上層Apk呼叫。 1 framework新增自定jni 新增自定義的jni檔案和Androidmk 新增系統編譯配置 新增自定義的jni檔案和Android.mk 首先在frameworks/base/下新建一個資料夾,命名可以自定義,例如/frameworks/base/jnitest/,在其目錄下新增兩個子目錄/java , /jni ,依據包名在/java下新增子目錄/java/com/rabi/testing/。 目錄新增完成之後在jni資料夾中新增兩個檔案,分別是原始碼的source.c和編譯使用的Android.mk。 source.c的程式碼如下:
#include <jni.h> #include <android/log.h>
#define TAG "rabi" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__)
JNIEXPORT void JNICALL Java_com_rabi_testing_JniUtil_Exam(JNIEnv *env, jclass type) { // TODO LOGD("this is a jni test!"); } 1 2 3 4 5 6 7 8 9 10 11 Android.mk程式碼如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := source.c LOCAL_MODULE := libsource
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY) 1 2 3 4 5 6 7 8 9 10 在java/com/rabi/testing/目錄下新增自定義的JniUtil.java,作為提供給上層的呼叫介面。JniUtil程式碼如下:
package com.rabi.testing;
public class JniUtil { static { System.loadLibrary("source"); } public static native void Exam(); } 1 2 3 4 5 6 7 8 新增原始碼完成後就可以執行模組編譯,編譯結果是一個libsource.so的庫,這個庫會在system/lib生成。
新增系統編譯配置 原始碼新增完成之後就是將jni加入Android客服端中,能夠作為介面提供給每一個上層應用。 首先在/build/core/pathmap.mk中新增自定義的資料夾名:
--- a/core/pathmap.mk +++ b/core/pathmap.mk @@ -92,6 +92,7 @@ FRAMEWORKS_BASE_SUBDIRS := \ keystore \ rs \ + jnitest \ 1 2 3 4 5 6 然後在/device/product/common/device.mk中新增自定義的MODULE。
--- a/device.mk +++ b/device.mk @@ -121,6 +121,7 @@ ifeq ($(strip $(TARGET_ARCH)), arm)
PRODUCT_PACKAGES += \ + libsource \ 1 2 3 4 5 6 新增完成後,進行整體編譯即可。
--------------------- 作者:Rabi_rabi 來源:CSDN 原文:https://blog.csdn.net/Rabi_rabi/article/details/78376065?utm_source=copy 版權宣告:本文為博主原創文章,轉載請附上博文連結!