Android-JAR包的引用
阅读原文时间:2023年08月24日阅读:1

一、JAR的定义

    JAR文件(Java归档,英语:Java Archive)是一种软件包文件格式,以ZIP格式构建,以.jar为文件扩展名,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。

二、JAR的分类

    JAR文件,可分为静态JAR包动态JAR包,其中,

  • 静态JAR包:参与编译,并打包进apk中,占用APK空间;
  • 动态JAR包:参与编译,不打包进apk中,运行时加载;

三、JAR在Android中的使用

  1. 在Android-Studio环境下

    项目的依赖库,需要修改工程下的build.gradle文件:

    • 静态JAR

      一般用于引用第三方的依赖库、模块,如:

      compile files('libs/commonApi.jar')

    • 动态JAR

      常见的应用场景就是引用系统框架库,如:

      compileOnly files('libs/framework.jar')

  2. 在Android源码环境下

    项目的依赖库,需要修改对应模块下的Android.mkAndroid.bp文件:

    • 静态JAR

      LOCAL_STATIC_JAVA_LIBRARIES := commonApi

    • 动态JAR

      LOCAL_JAVA_LIBRARIES := commonApi

四、动态JAR在Android源码中的实现

  1. 添加一个JAR模块

  2. 将对应JAR包引入Android工程,参与工程编译

  3. 将JAR添加至PRODUCT_BOOT_JARS(build/target/product/core_minimal.mk)

    PRODUCT_BOOT_JARS := <br /> …
    framework <br /> …
    commonApi

  4. 添加至白名单(build/core/tasks/check_boot_jars/package_whitelist.txt)

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

    commonApi.jar

    com.zhiqin.commonApi..*

      ps:在Android11未添加该值,功能正常,该条件不确定是否必要

  5. 烧写系统system.img,通过adb shell指令验证查看该jar是否导入BOOTCLASSPATH,以验证是否生效

    C:\Users\linzhiqin>adb shell $BOOTCLASSPATH
    /system/bin/sh: /system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/mms-common.jar:/system/framework/commonApi.jar