aspectjweaver missing requirement package=android.dalvik

本文解决在Apache Karaf中部署OSGi Bundle时集成Spring AOP遇到的问题。作者尝试添加AspectJ依赖并导出相关包,但出现错误。最终通过安装特定版本的AspectJ运行时和编织器Bundle,并导入必要的包解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I am trying to set up Spring AOP logging in OSGi bundle which is deployed in Apache Karaf. This is related to my post here. The answer provided there didn't help me. If I add maven dependency:

<dependency><groupId>org.aspectj</groupId><artifactId>com.springsource.org.aspectj.weaver</artifactId><version>1.6.2.RELEASE</version><scope>provided</scope></dependency>

I have to export a bunch of packages:

org.aspectj.lang.*,
org.aspectj.internal.lang.reflect.*,
org.aspectj.internal.lang.annotation.*,
org.aspectj.runtime.internal.*,
org.aspectj.runtime.*,
org.aspectj.weaver.reflect.*,
org.aspectj.apache.bcel.classfile.*,
org.aspectj.apache.bcel.*,
org.aspectj.bridge.*,
org.aspectj.util.*,
org.aspectj.weaver.*,
com.bea.jvm.*,

While the last one (com.bea.jvm.*) is breaking everything down. When I am trying to start my bundle it gives me the missing requirement error and says that this package is missing. (package=com.bea.jvm). But it is exported. Instead of above maven dependency I have also tried different others but the same issue.

What I am missing here? There aren't much of information on the internet related to OSGi and AOP. Can someone help me? I'm stuck here...

 
 
 

Finally I found a solution. I needed to install these bundles:

install http://repository.springsource.com/ivy/bundles/external/org.aspectj/com.springsource.org.aspectj.runtime/1.6.2.RELEASE/com.springsource.org.aspectj.runtime-1.6.2.RELEASE.jar

install http://repository.springsource.com/ivy/bundles/external/org.aspectj/com.springsource.org.aspectj.weaver/1.6.2.RELEASE/com.springsource.org.aspectj.weaver-1.6.2.RELEASE.jar

And import org.aopalliance.aop, package into my bundle and everything worked. Also there is no need to export this bunch of (org.aspectj) packages.

<think>好的,用户现在问的是关于`ADDITIONAL_PRODUCT_PROPERTIES += ro.dalvik.vm.enable_uffd_gc=$(config_enable_uffd_gc)`这行代码的作用。首先,我需要回忆之前用户的问题历史,之前他们询问过`config_enable_uffd_gc`变量的定义,现在这个新问题看起来是接着之前的讨论,继续深入这个变量在构建系统中的应用。 首先,我需要确认用户可能的背景。他们可能是在进行Android系统开发或定制,涉及到构建系统的配置,特别是与垃圾回收(GC)相关的优化设置。用户可能想知道这行代码如何将之前定义的`config_enable_uffd_gc`的值传递到系统属性中,进而影响运行时行为。 接下来,我需要解析这行代码的结构。`ADDITIONAL_PRODUCT_PROPERTIES`是Android构建系统中的一个变量,用于添加额外的系统属性。`+=`表示将右边的值追加到这个变量中。右边的部分是一个系统属性键值对,键是`ro.dalvik.vm.enable_uffd_gc`,值则是通过`$(config_enable_uffd_gc)`获取的,即之前定义的变量。 需要解释`ro.dalvik.vm.enable_uffd_gc`的作用。Dalvik虚拟机是Android运行时的一部分,这个属性可能控制是否启用基于userfaultfd的GC优化。userfaultfd是Linux内核的一个特性,用于处理用户空间页错误,可以用于优化内存管理,比如在GC时更高效地处理内存页。 然后,结合之前的`config_enable_uffd_gc`的定义,用户已经了解这个变量是如何通过优先级链(OVERRIDE,PRODUCT,default)来确定的。现在这行代码的作用是将最终确定的值赋给系统属性,这样在系统运行时,Dalvik虚拟机可以读取这个属性来决定是否启用相应的GC机制。 需要进一步说明这个属性如何在系统中生效。系统属性在Android中通常存储在`/system/build.prop`或类似的文件中,在系统启动时被读取。`ro`开头的属性是只读的,通常在构建时确定,不能在运行时修改。 还要注意可能的依赖关系,比如内核需要支持`CONFIG_USERFAULTFD`,否则即使属性设置为启用,实际功能可能无法正常工作。这可能涉及到兼容性问题,用户需要确保内核配置正确。 用户可能的应用场景包括调试、性能优化,或者定制ROM。例如,开发者可能在测试时通过临时覆盖变量来启用或禁用该功能,观察系统行为或性能变化。厂商可能在产品配置中永久启用该优化,以提升应用性能。 需要注意潜在的风险,比如错误设置导致GC行为异常,或在不支持的内核上启用导致崩溃。建议用户通过日志(如adb logcat)监控相关错误,特别是在修改这些配置后。 总结来说,这行代码的作用是将构建时确定的GC优化配置传递到系统属性,影响运行时行为。需要结合之前的变量定义,说明整个配置流程和实际影响,同时提醒相关的依赖和注意事项。</think>--- ### **代码段解析** ```makefile ADDITIONAL_PRODUCT_PROPERTIES += ro.dalvik.vm.enable_uffd_gc=$(config_enable_uffd_gc) ``` 这行代码用于将编译时确定的 `userfaultfd` GC 配置写入 Android 系统属性,最终影响运行时行为。以下是逐层分析: --- ### **1. 代码结构分解** | 部分 | 说明 | |-------------------------------|----------------------------------------------------------------------| | `ADDITIONAL_PRODUCT_PROPERTIES` | Android 构建系统中的变量,用于追加系统属性到 `/system/build.prop`。 | | `+=` | 表示向变量追加内容(而非覆盖)。 | | `ro.dalvik.vm.enable_uffd_gc` | 只读系统属性键(`ro` = read-only),控制 Dalvik 虚拟机是否启用基于 `userfaultfd` 的 GC 优化。 | | `$(config_enable_uffd_gc)` | 引用先前定义的变量值(由优先级链 `OVERRIDE > PRODUCT > default` 确定)。 | --- ### **2. 运行时行为逻辑** 1. **编译阶段** 根据 `config_enable_uffd_gc` 的值(`true`/`false`/`default`),生成 `ro.dalvik.vm.enable_uffd_gc` 属性并写入 `build.prop`。 2. **系统启动阶段** Dalvik 虚拟机(或 ART)读取 `ro.dalvik.vm.enable_uffd_gc` 属性,决定是否启用优化: - 若为 `true`:使用 `userfaultfd` 加速 GC 内存管理。 - 若为 `false` 或未定义:回退到传统 GC 机制。 --- ### **3. 实际影响** | 配置值 | 行为 | |----------------|----------------------------------------------------------------------| | `true` | 强制启用 `userfaultfd` GC(需内核支持 `CONFIG_USERFAULTFD=y`)。 | | `false` | 禁用此优化,使用标准 GC 实现。 | | `default` | 由代码逻辑自动判断(可能基于内核版本或设备兼容性)。 | --- ### **4. 典型使用场景** #### **场景 1:开发者调试** ```bash # 临时启用优化并编译 userdebug 版本 make OVERRIDE_ENABLE_UFFD_GC=true ``` - **验证点**:通过 `adb shell getprop ro.dalvik.vm.enable_uffd_gc` 检查属性值。 #### **场景 2:产品级配置** ```makefile # 在 BoardConfig.mk 中永久启用 PRODUCT_ENABLE_UFFD_GC := true ``` - **结果**:所有编译版本(包括出厂镜像)均启用该优化。 #### **场景 3:兼容性兜底** - 若内核未启用 `userfaultfd`,即使属性值为 `true`,代码可能自动降级为传统 GC(需查看虚拟机源码逻辑)。 --- ### **5. 关键依赖与限制** | 依赖项 | 说明 | |-------------------------|----------------------------------------------------------------------| | **内核支持** | 必须启用 `CONFIG_USERFAULTFD=y`,否则优化无法生效。 | | **虚拟机实现** | ART/Dalvik 需在代码中实际使用该属性(例如 `art/runtime/gc/...` 模块)。 | | **只读属性限制** | 属性值在编译时固化,**无法通过 `setprop` 在运行时修改**。 | --- ### **6. 调试与验证** 1. **确认属性值**: ```bash adb shell getprop ro.dalvik.vm.enable_uffd_gc ``` 2. **内核兼容性检查**: ```bash adb shell zgrep CONFIG_USERFAULTFD /proc/config.gz ``` 3. **日志监控**: ```bash adb logcat | grep -iE "uffd_gc|dalvikvm" ``` - 关注 `GC_DEBUG` 或 `E/art` 相关错误。 --- ### **总结** - **作用链**:`编译配置 → 系统属性 → 虚拟机行为`。 - **核心意义**:将构建时决策传递到运行时,实现 GC 优化与设备兼容性的灵活控制。 - **风险提示**:错误配置可能导致 GC 异常(需结合内核与代码逻辑验证)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值