Android 10 根文件系统和编译系统(十二):Android.mk编译java动态库

  

 配套系列教学视频链接:

Android 10.0 AOSP源码编译:

        AOSP源码开发环境搭建教学视频-百问100ask   

       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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值