【问题标题】:Dependency missing but exists in APK, how?缺少依赖但存在于 APK 中,怎么办?
【发布时间】:2021-05-01 09:10:48
【问题描述】:

我有一个MyLocationService 库,它依赖于huawei_location_service。在里面我有HMSLocationService 类,这是唯一一个使用huawei_location_service 类的类,我使用relfection 来访问该类。意思是,如果我们在华为上运行应用程序,如果有来自huawei_location_service 的依赖,我会得到位置,否则不会。并且应用程序应该可以在非华为设备上完美运行,而不依赖于huawei_location_service。

所以当我构建 MyLocationService.aar 时,我从它的 pom 文件中删除了 huawei_location_service 依赖项。之后,我创建了一个新应用程序并添加了来自 MyLocationService.aar 的依赖项。当我使用命令 gradlew app:dependencies 检查依赖项时,我没有看到来自 huawei 的任何依赖项,但是当我创建一个 apk 并对其进行分析时,在 classes.dex 中有来自 huawei_location_service 的类。 p>

问题:这怎么可能?还有其他方法可以实现我想要的吗?

附:我也分析了MyLocationService.aar,没有发现任何华为依赖。有没有其他方法可以检查 *.aar 文件的依赖关系,而不是 pom 或 android studio 的分析工具?

【问题讨论】:

    标签: android api gradle implementation transitive-dependency


    【解决方案1】:

    所以如果有人被误认为是我,这个答案会有所帮助。

    我在 classes.dex 中看到的存储库和类不是来自 hms 库。由于我在自定义类中有导入,因此导入的文本是我在 classes.dex 中看到huawei 文件夹的原因。还要注意大小,你可以看到它们是 20 字节。

    所以我删除了导入,再次生成我的库,创建 apk 并分析它,woala,没有可见的 huawei 文件夹。

    附: *.aars 不包含任何库,如果您不设置transitive=true。并且您需要在自己的应用程序中添加您的库所需的依赖项。

    附言如果您在本地或全局发布您的库,maven(Gradle 使用 maven)创建元数据,即所谓的 POM 文件,作为识别库需要的所有依赖项的帮助器。

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 2013-09-19
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多