编译 AIDL 时出错

Posted

技术标签:

【中文标题】编译 AIDL 时出错【英文标题】:Error while compiling AIDL 【发布时间】:2017-04-27 20:47:41 【问题描述】:

我正在尝试编译 .aidl 并生成 .java 但是:

Error:Execution failed for task ':library:compileReleaseAidl'.
> java.lang.RuntimeException: com.android.ide.common.process.ProcessException:
Error while executing 'C:\Users\Michele\AppData\Local\Android\sdk\build-tools\25.0.0\aidl.exe'
with arguments -pC:\Users\Michele\AppData\Local\Android\sdk\platforms\android-25\framework.aidl
-oC:\Users\Michele\workspace\AndroidLib\library\build\generated\source\aidl\release
-IC:\Users\Michele\workspace\AndroidLib\library\src
-IC:\Users\Michele\workspace\AndroidLib\library\src\release\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\appcompat-v7\25.0.1\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\support-v4\25.0.1\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\support-fragment\25.0.1\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\support-media-compat\25.0.1\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\support-core-ui\25.0.1\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\support-core-utils\25.0.1\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\animated-vector-drawable\25.0.1\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\support-vector-drawable\25.0.1\aidl
-IC:\Users\Michele\workspace\AndroidLib\library\build\intermediates\exploded-aar\com.android.support\support-compat\25.0.1\aidl
-dC:\Users\Michele\AppData\Local\Temp\aidl3070615992051288022.d
C:\Users\Michele\workspace\AndroidLib\library\src\IRemoteShortcutService.aidl

我用这个build.gradle

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'

group='com.github.michelelacorte'

android 
    compileSdkVersion 25
    buildToolsVersion '25.0.0'

    defaultConfig 
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 2
        versionName "0.2.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    

    sourceSets 
        main 
            aidl.srcDirs = ['src/main/aidl']
        
    

    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    


dependencies 
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', 
        exclude group: 'com.android.support', module: 'support-annotations'
    )
    compile 'com.android.support:appcompat-v7:25.0.1'
    testCompile 'junit:junit:4.12'
    compile 'com.google.code.gson:gson:2.8.0'

还有这个根build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript 
    repositories 
        jcenter()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    


allprojects 
    repositories 
        jcenter()
    


task clean(type: Delete) 
    delete rootProject.buildDir

我已阅读有关构建工具的问题,但没有发现任何有关 API 25 的信息

编辑:

我已经使用参数启动了aidl.exe,它返回:

aidl.exe E  2236 13884 aidl_language.cpp:224] Error while opening file for parsing: 'C:\Users\Michele\workspace\AndroidLib\library\src\IRemoteShortcutService.aidl'

编辑 2:

Shortcut.aidl

// Shortcut.aidl
package it.michelelacorte.androidshortcuts;

parcelable Shortcuts;

IRemoteShortcutService.aidl

// IRemoteShortcutService.aidl
package it.michelelacorte.androidshortcuts;

interface IRemoteShortcutService 

    void addShortcuts(int shortcutsImage, String shortcutsText);

    Shortcuts getShortcuts();

.aidl 位于src/main/aidl 文件夹中

【问题讨论】:

致电buildToolsVersion '25.0.1'。希望这有帮助。让我通知 我试过了......但没有 我可以知道你的gradle-wrapper 版本吗?我的..gradle-2.14.1-all.zip ***.com/questions/30518750/… 意外发布为答案而不是评论。您是否尝试将详细选项添加到 gradle 或使用相同的参数手动执行相同的aidl.exe?可能有来自aidl.exe的解释性错误代码或消息,gradle没有显示。 【参考方案1】:

在重构java包之后,aidl文件也改变了包的结构,但它错过了文件本身的包。

确保aidl 指定的包(.aidl 中的第一行)与其所在的文件夹相同。

【讨论】:

非常感谢。我没有注意到我的aidl 文件位于旧包中。【参考方案2】:

请补充

import it.michelelacorte.androidshortcuts.Shortcuts;

IRemoteShortcutService.aidl 文件中。

【讨论】:

【参考方案3】:

我的版本和你的一样。

我只是尝试编辑 IRemoteShortcutService.aidl 以导入 Shortcut 类。

虽然它们在同一个包中,但它编译成功。

【讨论】:

【参考方案4】:

您是否尝试将详细选项添加到 gradle 或使用相同的参数手动执行相同的aidl.exe?

可能有来自aidl.exe 的说明性错误代码或消息,而gradle 没有显示。

根据错误aidl无法打开文件。检查文件是否存在并且内容有效。

尝试更改为新的默认布局:

将aidl文件放入/src/main/aidl

build.gradle:

...
    sourceSets 
        main 
            aidl.srcDirs = ['src/main/aidl']
        
    

(不过,一般来说,如果文件在/src/main/aidl 中,它应该可以在没有aidl.srcDirs 条目的情况下工作)

不要忘记aidl 文件应该在java 等包文件夹下。例如,如果包是it.michelelacorte.testaidl,则aidl 文件应该在src/main/aidl/it/michelelacorte/testaidl 下。

在最新版本的 Android Studio 中,如果项目包设置正确,New/AIDL/AIDL File 项目菜单应该已经将文件放在正确的文件夹下。

【讨论】:

使用构建工具 25.0.0 编译aidl 没有任何问题,如果aidl 文件按预期位于src/main/aidl 中,则实际上无需修改aidl.srcDirs 即可正常工作。如果您可以将失败样本最少的 zip 放在某个地方,我们可以检查问题是在您的源/项目中还是在您的构建环境设置中。你如何运行它?工作室还是命令行?您是否尝试在 Studio 中从头开始使用aidl 创建新项目,将版本更改为您的版本并查看是否存在相同的问题? 这你已经说过了,但这不是一个建设性的对话,不清楚你到底做了什么,结果是什么。我在上面建议了一种建设性的方式来进行。了解您的问题。全新安装 25.0.0 与aidl 有no 问题。因此,原因要么在您的来源中,要么在您的环境中。将重现问题的简化来源放在某个地方,以便我们查看和理解。了解问题是在源头还是在环境中是重要的一步,您不觉得吗? src/main/aidl中按要求放置文件时,手动运行改变结构失败的命令,此时出现什么错误?可能是您忘记放入包文件夹等,并且有足以理解问题的新错误。如果您正在准备一个可重复项目最少的 zip,则检查起来要容易得多。 这不可能是同一个错误,因为至少您将文件移动到 src/main/aidl 并且输出的路径应该不同。 它从 \AndroidLib\library\src` to \AndroidLib\library\src\main\aidl 改变 请不要让我重复同样的事情,它变得令人沮丧......

以上是关于编译 AIDL 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Android开发,Eclipse创建aidl接口时,出错

添加应用内计费库时出错

编译cm11出错

ARM (UBOOT)编译出错问题

DataStage Transformer 编译出错

在Ubuntu中编译android代码出错。