android Q做services.jar使用的动态jar包

本文档详细介绍了如何创建并添加一个名为testjar的Android jar包到源码中,包括编写Java代码、配置Android.bp文件、添加白名单、更新PRODUCT_BOOT_JARS以及在services.jar中引用。此外,还说明了jar包更新后如何清理旧的编译产物以确保新jar包生效。
摘要由CSDN通过智能技术生成

一、先写一个自己的jar包

我的jar包是testjar,建一个testjar的文件夹,里面的Android.bp

// MAP API module

java_library {
    srcs: ["src/**/*.java"],
    name: "testjar",
    installable: true,
}

在testjar建src/com/anwtest/anwbt/testjar.java

package com.anwtest.anwbt;

import android.util.Log;

public class testjar{ 
	private static final String INFO_TAG = "testjar";
	private static final boolean DBG = true;
	private static testjar sTestjar;
	public static synchronized testjar getDefaultAnwBtService(){
		if(sTestjar == null){
			Log.d(INFO_TAG,"sTestjar now new");
			sTestjar = new testjar();
		}else{
			Log.d(INFO_TAG,"sTestjar has new, directly using");
		}
		return sTestjar;
	}
	public testjar()
	{
		debugLog("run testjar_1");
		debugLog("run testjar_2");
		debugLog("run testjar_3");
		debugLog("run testjar_4");
	}
	private void debugLog(String msg) {
		if (DBG) {
			Log.d(INFO_TAG, msg);
		}
	}

}

注意:

Android.bp里面一定要加installable: true,不然编译image的时候会报错:

internal error: failed to find dex jar path for module "testjar"

java_library表示是动态jar包

name表示jar包名

二、增加package白名单

在源码的build/make/core/tasks/check_boot_jars/package_whitelist.txt最后增加jar包白名单

###################################################

# testjar.jart

com\.anwtest\.anwbt

com\.anwtest\.anwbt\..*

不然会报错:

Error: out/target/common/obj/JAVA_LIBRARIES/testjar_intermediates/classes.jar contains class file com/anwtest/anwbt/testjar.class, whose package name com.anwtest.anwbt is not in the whitelist build/make/core/tasks/check_boot_jars/package_whitelist.txt of packages allowed on the bootclasspath.

三、在源码/build/target/product/base_system.mk中找到PRODUCT_BOOT_JARS,在最后面加上testjar

# The order matters for runtime class lookup performance.

PRODUCT_BOOT_JARS := \

    $(TARGET_CORE_JARS) \

    framework \

    ext \

    telephony-common \

    voip-common \

    ims-common \

    updatable-media \

        testjar

四、services.jar用到testjar,则需要在frameworks/base/services/core/Android.bp的libs里面添加上testjar,如下所示:

libs: [

        "services.net",

        "android.hardware.light-V2.0-java",

        "android.hardware.power-V1.0-java",

        "android.hardware.tv.cec-V1.0-java",

        "testjar",

],

否则在用到类的地方会提示找不到testjar对应的包

五、make –j8编译源码

六、将编译出来的image烧录到设备上,启动设备,然后就能看到testjar.jar里面的log了。

七、修改testjar.jar后,需要把/system/framework/arm和/system/framework/arm64里面的boot-testjar.oat、boot-testjar.art和boot-testjar.vdex删除。然后把testjar.jar放到/system/framework/里面,然后这个jar包就可以使用了。之后修改jar包只需要替换jar包就可以。如果不把boot-testjar.oat、boot-testjar.art和boot-testjar.vdex删除,修改的jar包替换进去会提示找不到jar包里面的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值