配套系列教学视频链接:
Android 10.0 AOSP源码编译:
Android系统 10.0 AOSP源码编译--CSDN程序员研修院
Android 10.0 根文件系统和编译系统:
Android根文件系统和编译系统教学视频-百问100ask
Android 10.0 根文件系统和编译系统-CSDN程序员研修院
说明
系统:AOSP Android10.0
设备:Android模拟器
前言
本文章重点讲解Android.mk如何控制java动态库,以及链接该java动态库,该例子会编译两个jar, 一个是计算三角型的类库, 一个是主程序,链接该三角形类库
一, java动态库程序代码
在Anroid层目录新建mytest/java_lib/lib目录, 并创建文件名:
mytest/java_lib/lib/Triangle.java
package com.qh.mytriangle;
public class Triangle
{
private int a;
private int b;
private int c;
public Triangle(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public Triangle()
{
this(9, 12, 15);
}
public int zhouChangFunc()
{
return (a+b+c);
}
public double areaFunc()
{
double p = zhouChangFunc()/2.0;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
}
二, java动态库Android.mk编写
Android源码参考模板: frameworks/base/cmds/svc/ 或者external/caliper/Android.mk
mytest/java_lib/lib/Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := libmytriangle
include $(BUILD_JAVA_LIBRARY)
三, 编译java动态库-jar
source build/env_setup.sh
lunch aosp_x86_64-eng
mmm mytest/java_lib/lib
生成的目标文件有如下:
中间文件: out/target/product/ctyun_ty1/obj/JAVA_LIBRARIES/libmytriangle_intermediates/
目标文件: out/target/product/ctyun_ty1/system/framework/libmytriangle.jar
四,主程序使用链接库代码
新建文件mytest/java_lib/main/TriangleDemo.java
package com.qh.main;
import com.qh.mytriangle.Triangle;
public class TriangleDemo
{
public static void main(String[] args)
{
Triangle t1;
t1 = new Triangle(3, 4, 5);
System.out.println("t1 area : "+t1.areaFunc());
System.out.println("t1 round :"+t1.zhouChangFunc());
}
}
mytest/java_lib/main//Android.mk编写如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_JAVA_LIBRARIES := libmytriangle
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := TriangleDemo
include $(BUILD_JAVA_LIBRARY)
主程序编译:
source build/env_setup.sh
lunch aosp_x86_64-eng
mmm mytest/java_lib/main
生成的目标文件有如下:
中间文件:
out/target/product/ctyun_ty1/obj/JAVA_LIBRARIES/TriangleDemo_intermediates/
目标文件: out/target/product/ctyun_ty1/system/framework/TriangleDemo.jar
五,运行
启动emulator时需要加参数: -writable-system, 如:
emulator -no-snapshot -verbose -show-kernel -writable-system -cores 4
这样才能使用adb remount, 将system或者vendor重新挂载成可读写分区 , 执行如下命令实现运行:
cd out/target/product/产品名/
adb remount
adb push libmytriangle.jar /data/local/tmp
adb push TriangleDemo.jar /data/local/tmp
#进入/data/local/tmp目录
adb shell
cd /data/local/tmp
#设置将要执行的jar包的classpass,不设置将无法执行:
/data/local/tmp #
export CLASSPATH=/data/local/tmp/TriangleDemo.jar:/data/local/tmp/libmytriangle.jar
/data/local/tmp # ls
TriangleDemo.jar libmytriangle.jar
ctyun_ty1:/data/local/tmp # app_process /data/local/tmp com.qh.main.TriangleDemo
t1 area : 6.0
t1 round :12