Android源码编译:core_intermediates/noproguard.classes-with-local.dex] 已杀死

本文介绍了解决Android应用编译时出现的noproguard.classes-with-local.dex错误的方法。通过检查内存使用情况,发现内存不足是导致错误的原因之一。文章详细介绍了如何增加虚拟内存(Swap)来解决此问题。
编译错误处理noproguard.classes-with-local.dex已杀死

错误现象描述:

Install: out/host/linux-x86/framework/dx.jar
Copy: dx (out/host/linux-x86/obj/EXECUTABLES/dx_intermediates/dx)
Install: out/host/linux-x86/bin/dx
target Dex: core
make: *** [out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes-with-local.dex] 已杀死
开始怀疑是软件的环境没有搭建好导致或者工具的版本不对,后来通过free -m查到内存快被耗光但是虚拟内存为0。通过增加虚拟内存解决该问题。
增加虚拟内存的方法如下:
查看内存空间大小:free -m // m表示显示的字节单位是m(megabytes)
下面我们就来增加系统的 Swap 大小。
1.首先用命令free查看系统内 Swap 分区大小。
free -m
total used free shared buffers cached
Mem: 1002 964 38 0 21 410
-/+ buffers/cache: 532 470
Swap: 251 32 929

可以看到 Swap 只有251M,不符合 Oracle-xe-client 的安装要求。

2.创建一个 Swap 文件。进入根目录
mkdir swap
cd swap
sudo dd if=/dev/zero of=swapfile bs=1024 count=2100000

出现下列提示,上面命令中的 count 即代表swap文件大小。

记录了 2100000+0 的读入
记录了 2100000+0 的写出
2102400000 字节 (102 MB) 已复制,110.74704 秒,137 MB/秒

把生成的文件转换成 Swap 文件
sudo mkswap swapfile

Setting up swapspace version 1, size = 2102395 kB
no label, UUID=09fde987-5567-498a-a60b-477e302a988b

3.激活 Swap 文件。
sudo swapon swapfile

再次查看 free -m 的结果。
total used free shared buffers cached
Mem: 1002 967 34 0 22 410
-/+ buffers/cache: 534 467
Swap: 2053 32 2021
添加成功。
如果需要一直保持这个 swap ,可以sudo -s换到root
然后把它写入 /etc/fstab 文件。
/swap/swapfile swap swap defaults 0 0
这样开机后就可以使用这个swap了

4.扩展:
如果需要卸载这个 swap 文件,可以进入建立的 swap 文件目录。执行下列命令。
sudo swapoff swapfile

5.可以手动删除swapfile

rm swapfile




释放一些内存也可以。

[ 3% 989/30520] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/with-local/classes.dex FAILED: /bin/bash -c "(rm -f out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/with-local/classes.dex ) && (rm -f out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/classes.jack ) && (rm -rf out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/jack-rsc ) && (mkdir -p out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/with-local/ ) && (mkdir -p out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/ ) && (mkdir -p out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/jack-rsc ) && (rm -f out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/jack-rsc/java-source-list ) && (touch out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/jack-rsc/java-source-list ) && (echo -n 'libcore/dex/src/main/java/com/android/dex/Annotation.java libcore/dex/src/main/java/com/android/dex/ClassData.java libcore/dex/src/main/java/com/android/dex/ClassDef.java libcore/dex/src/main/java/com/android/dex/Code.java libcore/dex/src/main/java/com/android/dex/Dex.java libcore/dex/src/main/java/com/android/dex/DexException.java libcore/dex/src/main/java/com/android/dex/DexFormat.java libcore/dex/src/main/java/com/android/dex/DexIndexOverflowException.java libcore/dex/src/main/java/com/android/dex/EncodedValue.java libcore/dex/src/main/java/com/android/dex/EncodedValueCodec.java libcore/dex/src/main/java/com/android/dex/EncodedValueReader.java libcore/dex/src/main/java/com/android/dex/FieldId.java libcore/dex/src/main/java/com/android/dex/Leb128.java libcore/dex/src/main/java/com/android/dex/MethodId.java libcore/dex/src/main/java/com/android/dex/Mutf8.java libcore/dex/src/main/java/com/android/dex/ProtoId.java libcore/dex/src/main/java/com/android/dex/SizeOf.java libcore/dex/src/main/java/com/android/dex/TableOfConten
07-26
FAILED: out_system/soong/hiddenapi/hiddenapi-stub-flags.txt out_system/host/linux-x86/bin/hiddenapi list --boot-dex=out_system/soong/.intermediates/packages/modules/IPsec/android.net.ipsec.ike/android_common_com.android.ipsec/aligned/android.net.ipsec.ike.jar --boot-dex=out_system/soong/.intermediates/external/apache-xml/apache-xml/android_common_apex31/dex-withres-aligned/apache-xml.jar --boot-dex=out_system/soong/.intermediates/external/bouncycastle/bouncycastle/android_common_apex31/aligned/bouncycastle.jar --boot-dex=out_system/soong/.intermediates/external/conscrypt/conscrypt/android_common_apex31/aligned/conscrypt.jar --boot-dex=out_system/soong/.intermediates/external/icu/android_icu4j/core-icu4j/android_common_apex10000/dex-withres-aligned/core-icu4j.jar --boot-dex=out_system/soong/.intermediates/libcore/core-libart/android_common_apex31/aligned/core-libart.jar --boot-dex=out_system/soong/.intermediates/libcore/core-oj/android_common_apex31/dex-withres-aligned/core-oj.jar --boot-dex=out_system/soong/.intermediates/frameworks/base/ext/android_common/dex-withres-aligned/ext.jar --boot-dex=out_system/soong/.intermediates/packages/modules/AdServices/adservices/framework/framework-adservices/android_common_apex33/aligned/framework-adservices.jar --boot-dex=out_system/soong/.intermediates/packages/modules/AppSearch/framework/framework-appsearch/android_common_apex33/aligned/framework-appsearch.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Bluetooth/framework/framework-bluetooth/android_common_apex33/aligned/framework-bluetooth.jar --boot-dex=out_system/soong/.intermediates/packages/modules/ConfigInfrastructure/framework/framework-configinfrastructure/android_common_apex34/aligned/framework-configinfrastructure.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Connectivity/framework/framework-connectivity/android_common_apex30/aligned/framework-connectivity.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Connectivity/framework-t/framework-connectivity-t/android_common_apex30/aligned/framework-connectivity-t.jar --boot-dex=out_system/soong/.intermediates/packages/modules/DeviceLock/framework/framework-devicelock/android_common_apex34/aligned/framework-devicelock.jar --boot-dex=out_system/soong/.intermediates/frameworks/base/libs/hwui/framework-graphics/android_common/aligned/framework-graphics.jar --boot-dex=out_system/soong/.intermediates/packages/modules/HealthFitness/framework/framework-healthfitness/android_common_apex34/aligned/framework-healthfitness.jar --boot-dex=out_system/soong/.intermediates/packages/providers/MediaProvider/apex/framework/framework-mediaprovider/android_common_apex30/aligned/framework-mediaprovider.jar --boot-dex=out_system/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/aligned/framework-minus-apex.jar --boot-dex=out_system/soong/.intermediates/packages/modules/OnDevicePersonalization/framework/framework-ondevicepersonalization/android_common_apex33/aligned/framework-ondevicepersonalization.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Permission/framework/framework-permission/android_common_apex30/aligned/framework-permission.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Permission/framework-s/framework-permission-s/android_common_apex30/aligned/framework-permission-s.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Scheduling/framework/framework-scheduling/android_common_apex31/aligned/framework-scheduling.jar --boot-dex=out_system/soong/.intermediates/packages/modules/SdkExtensions/java/android/os/ext/framework-sdkextensions/android_common_apex30/aligned/framework-sdkextensions.jar --boot-dex=out_system/soong/.intermediates/packages/modules/AdServices/sdksandbox/framework/framework-sdksandbox/android_common_apex33/aligned/framework-sdksandbox.jar --boot-dex=out_system/soong/.intermediates/packages/modules/StatsD/framework/framework-statsd/android_common_apex30/aligned/framework-statsd.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Connectivity/Tethering/common/TetheringLib/framework-tethering/android_common_apex30/aligned/framework-tethering.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Uwb/framework/framework-uwb/android_common_apex33/aligned/framework-uwb.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Virtualization/javalib/framework-virtualization/android_common_apex10000/aligned/framework-virtualization.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Wifi/framework/framework-wifi/android_common_apex30/aligned/framework-wifi.jar --boot-dex=out_system/soong/.intermediates/frameworks/opt/net/ims/ims-common/android_common/aligned/ims-common.jar --boot-dex=out_system/soong/.intermediates/external/okhttp/okhttp/android_common_apex31/aligned/okhttp.jar --boot-dex=out_system/soong/.intermediates/vendor/sprd/modules/radiointeractor/common/radio_interactor_common/android_common/aligned/radio_interactor_common.jar --boot-dex=out_system/soong/.intermediates/frameworks/opt/telephony/telephony-common/android_common/dex-withres-aligned/telephony-common.jar --boot-dex=out_system/soong/.intermediates/vendor/sprd/platform/frameworks/base/unipnp/unipnp-framework/android_common/aligned/unipnp-framework.jar --boot-dex=out_system/soong/.intermediates/vendor/sprd/platform/frameworks/base/unisoc-framework/android_common/aligned/unisoc-framework.jar --boot-dex=out_system/soong/.intermediates/vendor/sprd/modules/imsservice/common/unisoc_ims_common/android_common/aligned/unisoc_ims_common.jar --boot-dex=out_system/soong/.intermediates/packages/modules/Media/apex/framework/updatable-media/android_common_apex31/aligned/updatable-media.jar --boot-dex=out_system/soong/.intermediates/frameworks/opt/net/voip/voip-common/android_common/aligned/voip-common.jar --public-stub-classpath=out_system/soong/.intermediates/frameworks/base/api/android_stubs_current/android_common/dex/android_stubs_current.jar --system-stub-classpath=out_system/soong/.intermediates/frameworks/base/api/android_system_stubs_current/android_common/dex/android_system_stubs_current.jar --test-stub-classpath=out_system/soong/.intermediates/frameworks/base/api/android_test_stubs_current/android_common/dex/android_test_stubs_current.jar --core-platform-stub-classpath=out_system/soong/.intermediates/build/soong/java/core-libraries/legacy.core.platform.api.stubs/android_common/dex/legacy.core.platform.api.stubs.jar --out-api-flags=out_system/soong/hiddenapi/hiddenapi-stub-flags.txt.tmp && ( if cmp -s out_system/soong/hiddenapi/hiddenapi-stub-flags.txt.tmp out_system/soong/hiddenapi/hiddenapi-stub-flags.txt ; then rm out_system/soong/hiddenapi/hiddenapi-stub-flags.txt.tmp ; else mv out_system/soong/hiddenapi/hiddenapi-stub-flags.txt.tmp out_system/soong/hiddenapi/hiddenapi-stub-flags.txt ; fi ) # hash of input list: beaa35f7d22466404ad9634214147e281e167cb9da5836828065fb299d4f971b hiddenapi F 08-25 15:48:07 3322665 3322665 hiddenapi.cc:532] Superclass/interface Lkotlin/jvm/internal/Lambda; of class Landroidx/window/SafeWindowExtensionsProvider$isWindowExtensionsPresent$1; from dex file "out_system/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/aligned/framework-minus-apex.jar!classes4.dex" was not found. Either it is missing or it appears later in the classpath spec. Aborted 系统源码编译报错,怎么解决
最新发布
08-26
<think>我们正在解决Android系统源码编译过程中hiddenapi工具报错的问题。错误信息为: ``` hiddenapi F 08-25 15:48:07 3322665 3322665 hiddenapi.cc:532] Superclass/interface Lkotlin/jvm/internal/Lambda; of class Landroidx/window/SafeWindowExtensionsProvider$isWindowExtensionsPresent$1; from dex file "out_system/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/aligned/framework-minus-apex.jar!classes4.dex" was not found. Either it is missing or it appears later in the classpath spec. Aborted ``` ### 问题分析 1. **错误原因**:在编译过程中,hiddenapi工具在处理`framework-minus-apex.jar`时,发现类`Landroidx/window/SafeWindowExtensionsProvider$isWindowExtensionsPresent$1;`的父类/接口`Lkotlin/jvm/internal/Lambda;`在类路径中找不到。 2. **根本原因**:该问题通常是由于Kotlin标准库缺失或未正确包含在构建路径中引起的。`kotlin/jvm/internal/Lambda`是Kotlin标准库的一部分,而`framework-minus-apex.jar`中的Kotlin代码(这里是`androidx.window`相关代码)依赖了它。 ### 解决方案 #### 步骤1: 确保Kotlin标准库被正确包含 在Android源码构建中,使用Kotlin编写的模块需要显式依赖Kotlin标准库。我们需要检查包含`androidx.window`的模块(可能是`frameworks/base`)是否添加了Kotlin库依赖。 - **修改模块的Android.bp文件**:在定义`framework-minus-apex`的模块(通常是`frameworks/base/Android.bp`)中,确保添加了Kotlin标准库依赖。例如: ```bp java_library { name: "framework-minus-apex", // ... 其他配置 libs: [ // 添加Kotlin标准库 "kotlin-stdlib", // 可能还需要其他库 ], // 如果使用kotlinx库,也需要添加 static_libs: [ "kotlinx-coroutines-core", ], } ``` 注意:`kotlin-stdlib`可能已经在其他依赖中传递引入,但有时需要显式声明。 #### 步骤2: 检查Kotlin库的可用性 确保源码树中已经包含了Kotlin库的源码,并且已经正确编译。Kotlin库通常位于`external/kotlin`目录下。如果缺失,需要同步源码- 使用`repo`命令同步Kotlin库: ```bash repo init -u https://android.googlesource.com/platform/manifest -b master repo sync external/kotlin ``` #### 步骤3: 调整构建顺序 错误信息提示“Either it is missing or it appears later in the classpath spec”,即类路径中可能没有包含Kotlin库,或者Kotlin库出现在当前模块之后。我们需要确保在构建`framework-minus-apex`之前,Kotlin库已经构建完成,并且在类路径中靠前。 - 在`Android.bp`中,使用`static_libs`或`libs`引入的库会自动处理依赖顺序。但有时需要调整模块的构建顺序。可以尝试将`kotlin-stdlib`放在`libs`列表的前面。 #### 步骤4: 清理并重新构建 在修改后,进行清理并重新构建: ```bash make clean make framework-minus-apex -j8 # 或者整个系统编译 make -j8 ``` #### 步骤5: 验证Kotlin版本 如果问题仍然存在,可能是Kotlin版本不兼容。检查`external/kotlin`中的版本是否与`androidx.window`要求的版本匹配。可以在`frameworks/base`的`Android.bp`中指定Kotlin版本: ```bp java_library { name: "framework-minus-apex", // ... kotlincflags: ["-api-version 1.8", "-language-version 1.8"], } ``` ### 替代方案:移除Kotlin依赖(不推荐) 如果无法解决依赖问题,且模块中的Kotlin代码不是必需的,可以考虑移除Kotlin代码。但这可能会影响功能,因此仅作为最后手段。 1. 在`frameworks/base`中,查找并移除`androidx/window`相关的Kotlin代码。 2. 修改`Android.bp`文件,移除对Kotlin的依赖。 ### 相关问题 1. 如何解决Android构建中的类路径顺序问题? 2.Android源码中如何正确引入Kotlin库? 3. 如何调试hiddenapi工具的错误? 4. 如何检查Android构建中的依赖关系? 通过以上步骤,应该能够解决hiddenapi工具报错的问题。如果问题依旧,请提供更多构建环境信息(如Android版本、构建目标等)以便进一步分析。</think>### 解决Android源码编译中hiddenapi工具报错问题 #### 问题分析 在Android源码编译过程中,hiddenapi工具报错`Superclass Lkotlin/jvm/internal/Lambda; not found`,表明构建系统在解析类依赖时无法找到Kotlin标准库中的关键类。这通常由以下原因导致: 1. **Kotlin依赖缺失**:使用了Kotlin代码但未正确引入Kotlin标准库 2. **类路径顺序错误**:依赖库加载顺序不当导致父类后于子类加载[^1] 3. **SDK版本不兼容**:hiddenapi的API访问控制策略导致类不可见[^2] #### 解决方案 ##### 1. 添加Kotlin标准库依赖 在`framework-minus-apex`模块的构建配置中显式添加Kotlin依赖: ```bp // frameworks/base/Android.bp java_library { name: "framework-minus-apex", srcs: [...], libs: [ "kotlin-stdlib", // 添加Kotlin标准库 ... ], hiddenapi: { enabled: true, } } ``` ##### 2. 调整类路径加载顺序 在构建脚本中确保Kotlin库先于框架代码加载: ```diff # 修改构建命令 hiddenapi list \ + --boot-dex=out_system/soong/.intermediates/external/kotlin/kotlin-stdlib/android_common/aligned/kotlin-stdlib.jar \ # 确保先加载 --boot-dex=out_system/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/aligned/framework-minus-apex.jar \ ... ``` ##### 3. 验证SDK兼容性 检查`hiddenapi_flags.h`中Kotlin类的访问策略: ```cpp // art/libartbase/base/hiddenapi_flags.h static constexpr SdkVersion kMaxSdkVersions[] = { ... /* greylist-max-p */ SdkVersion::kP // 确保Kotlin类未设置过低SDK限制 }; ``` ##### 4. 清理并重建 ```bash # 清理构建缓存 make clean rm -rf out/soong/hiddenapi # 重新构建特定模块 make framework-minus-apex -j8 ``` #### 验证步骤 1. 检查构建日志中Kotlin库是否被正确引用 2. 确认`out/soong/.intermediates/external/kotlin`目录存在有效JAR 3. 使用`dexdump`验证类关系: ```bash dexdump -d out/.../framework-minus-apex.jar | grep 'Lkotlin/jvm/internal/Lambda;' ``` #### 根本原因解析 该错误源于Android构建系统的类加载机制: 1. hiddenapi在解析`SafeWindowExtensionsProvider$isWindowExtensionsPresent$1`时 2. 需要其父类`kotlin.jvm.internal.Lambda` 3. 但该类未在类路径中或加载顺序错误[^1] 4. 导致JVM抛出`NoClassDefFoundError`[^1] 通过显式添加依赖并调整加载顺序,可确保类层次结构完整加载[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值