从源码编译Android系统的Java类库和JNI动态库的方法
程序员文章站
2024-02-25 21:44:45
利用源码编译android系统java类库
1、编写java项目和android.mk文件
├── android.mk
└── src
└─...
利用源码编译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