欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

从源码编译Android系统的Java类库和JNI动态库的方法

程序员文章站 2024-02-22 19:36:22
利用源码编译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