启用了插孔的Android Studio构建错误

时间:2016-09-12 21:33:57

标签: java android android-studio android-build android-jack-and-jill

所以我最近将Android Studio默认JDK切换为Java 8,因此我可以使用Lambda表达式。我不得不让Jack让gradle构建,但是现在当我尝试重建我的应用程序时,我得到了3个不同的错误,这些错误似乎来自Jack。我似乎无法找到任何这些问题的根源,并希望继续使用J8。我们非常感谢您的任何见解或帮助。以下是我在构建过程中遇到的错误:

  

1)

     

错误:库读取阶段:从文件中键入javax.inject.Named   ' C:\用户\尼古拉斯\ AndroidStudioProjects \ BaseIntegrations \应用\构建\中间体\吉尔\调试\包装\ javax.inject-2.4.0-B10-e2682135301b663484690f1d3a4a523bcea2a732.jar'   已从文件导入   ' C:\用户\尼古拉斯\ AndroidStudioProjects \ BaseIntegrations \应用\构建\中间体\吉尔\调试\包装\ javax.inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar&#39 ;,   键入' javax.inject.Named' (参见property' jack.import.type.policy' for   类型冲突政策)

     

2)

     

错误:com.android.jack.JackAbortException:库读取阶段:类型   javax.inject.Named from file   ' C:\用户\尼古拉斯\ AndroidStudioProjects \ BaseIntegrations \应用\构建\中间体\吉尔\调试\包装\ javax.inject-2.4.0-B10-e2682135301b663484690f1d3a4a523bcea2a732.jar'   已从文件导入   ' C:\用户\尼古拉斯\ AndroidStudioProjects \ BaseIntegrations \应用\构建\中间体\吉尔\调试\包装\ javax.inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar&#39 ;,   键入' javax.inject.Named' (参见property' jack.import.type.policy' for   类型冲突政策)

     

3)

     

错误:com.android.jack.backend.jayce.TypeImportConflictException:Type   javax.inject.Named from file   ' C:\用户\尼古拉斯\ AndroidStudioProjects \ BaseIntegrations \应用\构建\中间体\吉尔\调试\包装\ javax.inject-2.4.0-B10-e2682135301b663484690f1d3a4a523bcea2a732.jar'   已从文件导入   ' C:\用户\尼古拉斯\ AndroidStudioProjects \ BaseIntegrations \应用\构建\中间体\吉尔\调试\包装\ javax.inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar&#39 ;,   键入' javax.inject.Named' (参见property' jack.import.type.policy' for   类型冲突政策)

     

4)

     

:app:compileDebugJavaWithJack FAILED   错误:任务':app:compileDebugJavaWithJack'执行失败。   java.io.IOException:com.android.jack.api.v01.CompilationException:库读取阶段:在文件' C:\ Users \ nicholas \ AndroidStudioProjects \ BaseIntegrations \ app \ build \ intermediates中键入javax.inject.Named \吉尔\调试\包装\ javax.inject-2.4.0-B10-e2682135301b663484690f1d3a4a523bcea2a732.jar'已经从文件中导入了C:\ Users \ nicholas \ AndroidStudioProjects \ BaseIntegrations \ app \ build \ intermediates \ jill \ debug \ packaged \ javax.inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar',type&#39 ; javax.inject.Named' (参见property' jack.import.type.policy' for type collision policy)

以下是app level build.gradle:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"

    defaultConfig {
        applicationId "com.nicholas.baseintegrations"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"

        jackOptions {
            enabled true
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    useLibrary  'org.apache.http.legacy'

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.0'
    compile 'com.google.android.gms:play-services-gcm:9.4.0'
    compile project(path: ':backend', configuration: 'android-endpoints')
    compile "com.getbase:basecrm-java:1.4.3"
    compile 'com.android.support:recyclerview-v7:24.2.0'
    compile 'com.android.support:palette-v7:24.2.0'
    compile 'com.android.support:cardview-v7:24.2.0'
    compile 'com.android.support:design:24.2.0'
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.21'
    compile group: 'org.glassfish.jersey.media', name: 'project', version: '2.23.2', ext: 'pom'
}

非常感谢所有帮助,因为我知道这是一个新事物,但似乎无法找到有关Jack / J8构建过程的问题。提前谢谢。

3 个答案:

答案 0 :(得分:1)

我们正在研究这个问题,我认为这是由于Jack和javac的Android Gradle插件的不同行为造成的。作为解决方法,您可以在jackOptions

中尝试此操作
additionalParameters = [ "jack.import.type.policy" : "keep-first" ]

但请注意,使用该选项,杰克将保留其遇到的类的第一个定义。

您可以在此处跟踪我们的进度:https://code.google.com/p/android/issues/detail?id=222273

答案 1 :(得分:0)

我最终解决了这个构建问题。我的一个依赖是添加了第二个javax.inject库,它抛出了这些构建错误,说明javax.inject jar已经从前一个jar中导入了。

所以我有javax.inject-1和javax.inject-2.4.0-b10。我最终从我的一个依赖项中排除了javax.inject模块,它清除了构建的问题,现在正在运行jsut。

以下是我的应用build.gradle的依赖项部分:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile project(path: ':backend', configuration: 'android-endpoints')
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.21'
    compile (group: 'org.glassfish.jersey.media', name: 'project', version: '2.23.2', ext: 'pom')
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.google.android.gms:play-services-gcm:9.4.0'
    compile ('com.getbase:basecrm-java:1.4.3') {
        exclude (group: 'javax.inject', module: 'javax.inject')
    }
    compile 'com.android.support:recyclerview-v7:24.2.1'
    compile 'com.android.support:palette-v7:24.2.1'
    compile 'com.android.support:cardview-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
}

您可以在basecrm依赖项中看到组排除。因此,如果其他人有此问题,请注意来自某些依赖项导入的重复外部库。

答案 2 :(得分:0)

我遇到了同样的问题,然后我在这两个jar中找到了相同的包,但它们不是同一个版本。 因此修改它们的版本相同。