AOSP编译好的rom,烧录入Android Studio里的avd emulator

1.编译AOSP

2.把out/target/product/输出的文件夹拷贝至本地

3.Android Studio新建avd

4.打开avd所在文件夹

5.删除avd文件夹所有内容(除了配置文件config)

6.打开sdk里原装的image所在文件夹,例如system-images\android-R\google_apis\x86_64\,(该路径可在步骤5里的config文件找到)

7.把步骤2中的文件一一对应替换掉步骤6文件夹中的文件。(其中需要把qemu的img重命名,例如system-qemu.img,重命名为system.img进行替换。)

8打开avd,便成功 

AOSPAndroid Open Source Project)编译过程中,若出现类似如下日志: ``` com.android.tools.r8.internal.Ke: Absent Code attribute in method that is not native or abstract ``` 该日志信息表明,R8在处理某个类文件时发现了一个非`native`或非`abstract`的方法缺少`Code`属性。Java虚拟机规范要求,所有非`native`和非`abstract`的方法必须包含`Code`属性,否则在类加载或字节码优化阶段会抛出错误[^1]。 从日志中可以看到具体的类和方法信息: ``` origin: out_sys/soong/.intermediates/vendor/xxxx/frameworks/base/core/xxxx-framework/android_common/4f42f850644816817b3cc097eabe46ce/jarjar/xxxx-framework.jar:com/xxxx/xmp/impl/XMPDateTimeImpl.class ``` 以及方法签名: ``` Lcom/xxxx/xmp/impl/XMPDateTimeImpl;<init>()V ``` 这表示错误发生在`XMPDateTimeImpl`类的构造方法中。因此,**AOSP编译错误日志确实明确指出了导致问题的类和方法**,可以直接定位到具体的类文件和方法位置,便于进一步排查问题来源。 ### 常见问题来源与排查建议 - **依赖库不完整或不规范** 若某个依赖库在构建过程中生成了不完整的类文件(例如缺少方法体),则会导致R8报出上述错误。这种问题常见于某些遗留框架或未正确维护的第三方库中。 - **接口默认方法问题** 在Java 8及以上版本中,接口支持默认方法实现。某些版本的R8可能无法正确解析这些默认方法的字节码结构,导致编译失败。 - **编译配置错误** 若某个模块在编译配置文件(如`Android.bp`或`Android.mk`)中未被正确声明,可能导致编译系统在处理依赖时引入错误的类文件或依赖版本[^2]。 - **字节码优化冲突** 若某个类文件经过额外的字节码处理(如混淆、重写、或插桩),可能会破坏其结构,导致R8无法正确解析方法体。 ### 排查方式 - **检查日志中提供的类路径和方法签名** 日志中的`origin`字段提供了具体的类文件路径和所属JAR包,可直接定位到问题类文件。 - **确认依赖版本和来源** 检查`xxxx-framework.jar`是否为预期版本,是否存在多个版本冲突的情况。 - **排除问题类或依赖** 在构建配置中排除该类或相关依赖,防止其被带入最终构建流程中。 - **使用R8规则跳过特定类处理** 在构建配置中添加规则,避免R8对问题类进行优化或处理: ```proguard -keep class com.xxxx.xmp.impl.XMPDateTimeImpl { *; } ``` ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值