Ошибки сборки Android Studio при включенном разъеме

Поэтому я недавно переключил JDK по умолчанию в Android Studio на Java 8, чтобы я мог использовать лямбда-выражения. Мне нужно было разрешить Джеку позволить сборщику построить, но теперь, когда я пытаюсь перестроить свое приложение, я получаю около 3 различных ошибок, которые, похоже, исходят от Джека. Я не могу найти корень какой-либо из этих проблем, и я хотел бы продолжить строить с J8. Любое понимание или помощь для этого очень ценится. Вот ошибки, которые я получаю во время сборки:

1)

Ошибка: фаза чтения библиотеки: введите javax.inject.Name из файла 'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\ промежуточные \jill\debug\packaged\javax.inject-2.4.0-b10-e2682135301b663484690f1d3a4a52332ce2. jar 'уже был импортирован из файла' C: \ Users \ nicholas \ AndroidStudioProjects \ BaseIntegrations \ app \ build \ middleates\jill\debug\packaged\javax.inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar', введите javaxin. ' (см. свойство'jack.import.type.policy'для политики коллизий типов)

2)

Ошибка:com.android.jack.JackAbortException: фаза чтения библиотеки: введите javax.inject.Name из файла 'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\ промежуточные \jill\debug\packaged\javax.inject-2.4.0-b10-e2682135301b663484690f1d3a4a523bcea2a732.jar"уже импортирован из файла 'C: \ Users \ Николаса \ AndroidStudioProjects \ BaseIntegrations \ приложение \ сборки \ интермедиатов \ Джил \ Debug \ упаковывают \ javax.inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar' введите "javax.inject.Named" (см. свойство "jack.import.type.policy" для определения политики коллизий типов).

3)

Ошибка:com.android.jack.backend.jayce.TypeImportConflictException: введите javax.inject.Named из файла 'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\ промежуточные файлы \jill\debug\packaged\javax.inject-2.4.0-b10-e2682135301b663484690f1d3a4a523bcea2a732.jar"уже импортирован из файла 'C: \ Users \ Николаса \ AndroidStudioProjects \ BaseIntegrations \ приложение \ сборки \ интермедиатов \ Джил \ Debug \ упаковывают \ javax.inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar' введите "javax.inject.Named" (см. свойство "jack.import.type.policy" для определения политики коллизий типов).

4)

: app: compileDebugJavaWithJack FAILED Ошибка: не удалось выполнить задачу ':app:compileDebugJavaWithJack'. java.io.IOException: com.android.jack.api.v01.CompilationException: фаза чтения библиотеки: введите javax.inject.Named из файла 'C:\Users\nicholas\AndroidStudioProjects\BaseIntegrations\app\build\ промежуточный тип \jill\debug\packaged\javax.inject-2.4.0-b10-e2682135301b663484690f1d3a4a523bcea2a732.jar'уже импортирован из файла' C: \ Users \ nicholas \ AndroidStudioProjects \ BaseIntegrations \ app \ build \ промежуточные файлы \ jill \ debug \ debug. inject-1-4a242883e90a864db3b80da68e11a844f842d2df.jar ', введите'javax.inject.Named' (см. свойство'jack.import.type.policy'для политики коллизий типов)

Вот уровень приложения 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 ответа

Решение

Я решил эту проблему со сборкой. Одной из моих зависимостей было добавление второй библиотеки javax.inject, которая выдавала эти ошибки сборки, говоря, что jar javax.inject уже был импортирован из предыдущего.

Итак, у меня были javax.inject-1 и javax.inject-2.4.0-b10. В итоге я исключил модуль javax.inject из одной из моих зависимостей, и он устранил проблемы со сборкой и теперь работает нормально.

Вот раздел зависимостей моего приложения 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. Так что, если у кого-то еще есть эта проблема, просто следите за дублированием внешних библиотек, возникающих при импорте зависимостей.

Мы смотрим на это, я думаю, это связано с разным поведением плагина Android Gradle для Джека и javac. В качестве обходного пути, вы можете попробовать это в jackOptions

additionalParameters = [ "jack.import.type.policy" : "keep-first" ]

Но имейте в виду, что с этой опцией Джек сохранит первое определение класса, с которым он сталкивается.

Вы можете отслеживать наш прогресс здесь: https://code.google.com/p/android/issues/detail?id=222273

Я столкнулся с той же проблемой, затем я нашел один и тот же пакет в этих двух банках, но они не являются одной и той же версией. Так что модифицируйте, чтобы у них была одинаковая версия.

Другие вопросы по тегам