利用源碼編譯Android系統Java類庫
1、編寫Java項目和Android.mk文件
├── Android.mk └── src └── com └── lhw └── framework └── led └── Led.java
Led.java文件
package com.lhw.framework.led; /** * LED操作庫 * @author Micky Liu */ public class Led { public boolean turnOn() { return true; } public boolean turnOff() { return true; } }
Android.mk文件
LOCAL_PATH := $(call my-dir) LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_MODULE := framework_led LOCAL_MODULE_TAGS := framework_led LOCAL_JAVA_LIBRARIES := LOCAL_STATIC_JAVA_LIBRARIES := include $(BUILD_JAVA_LIBRARY)
2、編譯
mmm /home/administrator/workspace/android_test/framework_led
編譯結果:
Install: out/target/product/generic/system/framework/framework_led.jar
利用源碼編譯Android系統JNI動態庫
1、代碼和Android.mk編寫
├── jni│ ├── Android.mk│ └── led.c
led.c
#include <jni.h> #include <stdio.h> jboolean Java_com_lhw_led_Led_turnOn(JNIEnv *env, jclass thiz) { return JNI_TRUE; } jboolean Java_com_lhw_led_LED_trunOff(JNIEnv *env, jclass thiz) { return JNI_TRUE; } 注:方法名命名規則為:Java_包名_類名_方法名,可以用javah 命令根據java文件生成所需要的.h頭文件。當然更好的辦法是通過JNI_OnLoad和AndroidRuntime::registerNativeMethods實現動態注冊,這樣可以不用理會方法名規則。這里只是做個簡單的例子,在后面會用一個例子實現動態注冊。
Android.mk
LOCAL_PATH := $(call my-dir) LOCAL_SRC_FILES := led.c LOCAL_MODULE := led_jni LOCAL_MODULE_TAGS := led_jni LOCAL_PRELINK_MODULE := false LOCAL_SHARED_LIBRARIES := libc include $(BUILD_SHARED_LIBRARY)
2、編譯
mmm /home/administrator/workspace/android_test/jni
編譯結果:
Install: out/target/product/generic/system/lib/led_jni.so
新聞熱點
疑難解答
圖片精選