1. 程式人生 > >Android framework層自定義jni

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  版權宣告:本文為博主原創文章,轉載請附上博文連結!