【发布时间】:2020-04-02 13:48:04
【问题描述】:
这个问题可能是由于我的 IPC 服务 APK(将作为独立进程运行)在 Android Studio 中配置为 模块 而不是单独的项目。该项目包含一个应用程序和三个模块,一个模块是蓝牙库,另外两个模块创建独立的 IPC 服务 APK。蓝牙库通过 AIDL 使用这些服务。在调试模式下,我可以将 Android Studio 中的服务安装为无活动 APK。我还可以安装使用 Android Studio 中的蓝牙库的主应用程序。它在调试模式下工作正常。
但是,当我尝试在发布模式下构建整个项目时,当我尝试安装 AIDL API 重复的服务(不是主应用程序)时出现构建错误(相同的 classes.jar 存在于蓝牙库“构建”目录与服务构建目录中的一样)。实际消息是
Type com.pcha.proprietary.handler.IConnectionCallback$Default is defined multiple times:
有人明白吗?我的猜测是,如果我将服务设为一个单独的项目(在 Android Studio 中,它必须出现在一个单独的窗口中,这很痛苦),那就没问题了。
我拥有截至 2020 年 4 月 2 日的最新版本的 AS
我尝试删除 IPC 服务模块中的 AIDL 文件副本,并指向主蓝牙服务中的单个 AIDL 文件。这再次在调试模式下工作,但一旦我开始发布,我就会得到相同的定义多次错误。
一些进展:在每个 IPC 服务中,我删除了 AIDL 目录,并在 gradle.build 文件中排除了对源集中的aidl 文件的任何引用。这允许我在发布模式和调试模式下构建,但 IPC 和主要服务仅在 minifyEnabled 为 false 时才有效。在 minfiyEnabled true 中,主服务找不到 IPC 服务。
【问题讨论】:
-
您可能应该检查所有依赖项并查看它们是否具有特定的 proguard 配置。您通常需要将一些类设置为 -keep ,它会起作用。你的依赖是什么?
-
@AviParshan 使用 minifyEnabled true 时发生的情况是 Android 删除了所有不公开的类和方法。最终结果是,如果您的模块是一个库,您必须对使用 minifyEnabled false 生成的 aar 文件使用 proguard。所以这是一个两步过程 - 生成 aar,然后单独使用 proguard。有特殊的 proguard '方法'来处理库。它有点难看,但我以前做过小规模的。您希望将 minifyEnabled 排除在初始库构建之外!
标签: android android-studio aidl