【问题标题】:Android Studio/Gradle fails to build due "missing" Parcelable class in java file由于 java 文件中“缺少”Parcelable 类,Android Studio/Gradle 无法构建
【发布时间】:2015-03-20 17:42:13
【问题描述】:

我有一个包含多个 AIDL 文件的服务。其中,我只是添加了一个自定义对象,我在 .java 文件中作为接口的一部分定义为“in”参数,并在 parcelable 声明中包含了它的 .aidl。

构建失败,错误提示自定义 Parcelable java 类未定义。

知道为什么 Android Studio(或命令行中的 gradle)会忽略 java 类定义吗? java 类实现 Parcelable 接口以及静态 CREATOR。

构建过程会从aidl 文件生成java 文件,但原始java 类不会复制到该目录中。虽然我承认这可能不是 Android Studio 构建过程的工作方式,但它是 android-x86 项目的构建方式。

肯定其他人已经看到了 Android Studio 没有构建 Parcelable 对象的地方,并找到了解决方案...?

【问题讨论】:

  • 我能够在 Android Eclipse 项目下使用相同的代码,并且由于项目截止日期,我会将我的开发迁移到该平台。但是,如果有人知道答案,它可能对其他人有帮助。顺便说一句,Eclipse 并没有像我预期的那样复制 Java 文件,但是会生成正确的类文件。

标签: java android build gradle aidl


【解决方案1】:

我刚刚用parcelable类编译如下。

  • 自从工作室自动创建aidl 以来,没有将java 文件与aidl 文件一起放置 单独的文件夹。
  • 在aidl文件夹下创建包,包路径相同 Paracelable 类。
  • 使用 Parcel 参数实现 Parcelable.Creator 和构造函数

例如,

app > java > com.sample.pojo.parcelable > Item.java

app >aidl > com.sample.pojo.parcelable > Interface.aidl

app >aidl > com.sample.pojo.parcelable > Item.aidl

确保 Interface.aidl 在代码中导入 com.sample.pojo.parcelable.Item。

【讨论】:

  • 我在发布之前尝试过它时无法让它工作。 aidl 构建未看到 Java 文件。此外,我认为这是一个不太理想的解决方案,因为在这个项目和另一个项目之间共享aidl意味着你不能只共享aidl代码——你必须从java树中寻找并共享特定的java文件也是。这违反了将 Java 文件放在aidl 树中的约定。
  • android studio在app中创建aidl文件夹>在studio项目结构中默认设置aidl。该结构没有手动操作,两者仍在同一个项目中。如果您使用终端浏览,它会在 app/src/main/aidl/ 下创建。是的,这违反了惯例,但更容易维护 java 文件,因为它们位于不同的文件夹中,尤其是在工作室中。
  • 这是帮助我解决问题的唯一解决方案,因为我犯了一个错误,即没有为 parcelable 类保持相同的路径。
【解决方案2】:

我在 Android Studio 中遇到了类似的问题,@JCampy 正确地说“Eclipse 不会像我预期的那样复制 Java 文件”。所以要解决这个问题,复制由其他应用程序/服务分发的 AIDL 文件 + Parcelable java 源并粘贴到客户端项目,例如在 [项目]/app/src/main/aidl 下。现在在客户端应用程序的 build.gradle 中添加以下内容。所以基本上,您已经在客户的项目中指出了其他应用程序/服务的可打包 java 类的源路径。

android {
    compileSdkVersion 29
    defaultConfig {
    ....
    }
    sourceSets { // <-- point to the right source path of AIDL
        main {
            java.srcDirs = ['src/main/java', 'src/main/aidl']
        }
    }
}

【讨论】:

    猜你喜欢
    • 2022-10-06
    • 2013-07-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2012-06-20
    • 2021-11-11
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多