Android11快速编译并替换framework.jar

Android11快速编译并替换framework.jar

在Android11之前修改了framework相关代码,只需make framework就可以编译出framework.jar。在Android11,这个编译命令不起作用了,根据framework/base/目录下Android.bp中的提示:

java_library {
    name: "framework-minus-apex",
    defaults: ["framework-defaults"],
    srcs: [":framework-non-updatable-sources"],
    installable: true,
    ......
    // For backwards compatibility.
    stem: "framework",
    apex_available: ["//apex_available:platform"],
    visibility: [
        "//frameworks/base",
        // TODO(b/147128803) remove the below lines
        "//frameworks/base/apex/blobstore/framework",
        "//frameworks/base/apex/jobscheduler/framework",
        "//frameworks/base/packages/Tethering/tests/unit",
    ],
}

// This "framework" module is NOT installed to the device. It's
// "framework-minus-apex" that gets installed to the device. Note that
// the filename is still framework.jar (via the stem property) for
// compatibility reason. The purpose of this module is to provide
// framework APIs (both public and private) for bundled apps.
// "framework-minus-apex" can't be used for the purpose because 1)
// many apps have already hardcoded the name "framework" and
// 2) it lacks API symbols from updatable modules - as it's clear from
// its suffix "-minus-apex".

可以看到framework变为了framework-minus-apex,通过stem属性使编译出来的模块还叫framework.jar,这样修改的目的一个是为了向后兼容以前的jar名称,一个也是为了表示现在framework是减去了apex的模块,所以带个minus-apex的后缀。
那么编译的时候就要换成下面的命令:

make framework-minus-apex

编译出framework.jar后,先用下面的命令remount:

adb root;adb disable-verity;adb reboot;adb wait-for-device;adb root;adb remount

然后把framework.jar push到system/framework/下面,同时还要删除这个目录下面的oat,arm,arm64三个目录(不删除会一直卡在开机动画),最后再运行下面的命令重启zygote,这样新替换的framework.jar就生效了。

adb shell stop;adb shell start;

### 如何在 Android Studio 中加载自定义 `framework.jar` 文件 在开发基于特定设备或系统的 Android 应用程序时,可能需要加载自定义的 `framework.jar` 文件。以下是详细的配置方法: #### 1. 准备工作 确保已获取目标设备的 `framework.jar` 文件。通常可以从设备上提取该文件,或者由硬件厂商提供。 #### 2. 将 `framework.jar` 添加到项目中 将下载或提取的 `framework.jar` 文件复制到项目的 `libs` 目录下。如果没有此目录,则需手动创建它。 ```plaintext your_project/ ├── app/ │ ├── libs/ # 创建这个目录framework.jar 放在这里 │ │ └── framework.jar # 自定义框架库文件 ``` #### 3. 配置 Gradle 构建脚本 编辑模块级的 `build.gradle` 文件(通常是 `app/build.gradle`),以包含 `framework.jar` 将其作为依赖项引入。 ```gradle dependencies { implementation files('libs/framework.jar') // 引入 framework.jar 到构建路径 } ``` 保存更改后同步项目以使新依赖生效。 #### 4. 修改编译选项 (可选) 某些情况下,原始的 `framework.jar` 可能未经过优化处理,因此需要禁用 ProGuard 或 R8 对其进行混淆操作。可以在 `proguard-rules.pro` 文件中添加如下规则: ```pro -keep class com.example.framework.** { *; } // 替换为实际包名前缀 -dontwarn com.example.framework.** ``` 这一步可以防止因混淆而导致的功能异常[^1]。 #### 5. 使用 AOSP 编译环境 (高级场景) 对于更复杂的定制需求,建议设置完整的 Android Open Source Project (AOSP) 开发环境,重新编译整个系统镜像来集成修改后的 `framework.jar`。这种方法适用于深度定制 ROM 场景下的开发人员。 --- ### 注意事项 - 如果遇到冲突问题,请检查是否存在重复定义的方法或类。 - 确认所使用的 `framework.jar` 版本与目标平台一致;否则可能导致兼容性错误。 - 在调试阶段推荐启用日志记录功能以便快速定位潜在问题。 ```java Log.d("FrameworkTest", "Custom Framework Loaded Successfully!"); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值