Generated Signed Bundle / APK - Lint обнаружил фатальные ошибки при сборке цели выпуска - PullRequest
2 голосов
/ 05 ноября 2019

Я пытаюсь сгенерировать apk с подписью, но у меня появляется следующая ошибка:

Lint found fatal errors while assembling a release target.

To proceed, either fix the issues identified by lint or modify your build script as follows:
...
android {
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
}
...

Итак, я начал смотреть, как решить проблему, и ударил головой по этому вопросу. и я нашел некоторую полезную информацию.

На практике в ..\app\build\reports\ есть файл с именем \lint-results-release-fatal.html, содержащий причину ошибки:

Duplicate Platform Classes
../../build.gradle: commons-logging defines classes that conflict with classes now provided by Android. Solutions include finding newer versions or alternative libraries that don't have the same problem (for example, for httpclient use HttpUrlConnection or `okhttp` instead), or repackaging the library using something like jarjar.
../../build.gradle: `httpclient` defines classes that conflict with classes now provided by Android. Solutions include finding newer versions or alternative libraries that don't have the same problem (for example, for `httpclient` use HttpUrlConnection or `okhttp` instead), or repackaging the library using something like jarjar.

Извините, если чтение может быть скучным, но я пытаюсь объяснить шаг за шагом ...

Поэтому я продолжал искать, пока не застрял после этого вопроса . В основном совет состоит в том, чтобы добавить эти две строки кода, чтобы исключить повторяющиеся классы:

configurations {
    all {
        exclude module: 'httpclient'
        exclude module: 'commons-logging'
    }
}

К сожалению, возникает проблема, когда я снова собираюсь компилировать приложение, я получаю эту ошибку, которую не могу решить:

error: cannot access ContentType
class file for org.apache.http.entity.ContentType not found

Я действительно думаю, что исключение модуля httpclient и вышеупомянутая ошибка связаны, но я могу ошибаться ...

Это некоторая полезная информация:

Android Studio 3.5.1
Build #AI-191.8026.42.35.5900203, built on September 25, 2019
JRE: 1.8.0_202-release-1483-b03 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

Еще раз спасибо за чтение здесь, и если у вас есть решение или предложение, добро пожаловать!

14: 54 05/11/19

Добавьте другую информацию, которая может дать вам более полное представление о ситуации

compileSdkVersion 28
defaultConfig {
    applicationId "com.example.app"
    minSdkVersion 22
    targetSdkVersion 28
    versionCode 2
    versionName "21.19.08.27"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}

16: 35 05/11/2019

Здесь есть зависимости

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    implementation 'com.google.android.material:material:1.1.0-alpha07'
    implementation 'com.google.code.gson:gson:2.8.5'

    implementation 'com.williamww:silky-signature:0.1.0'
    implementation 'com.afollestad.material-dialogs:core:0.9.1.0'
    implementation 'com.weiwangcn.betterspinner:library-material:1.1.0'
    implementation 'com.weiwangcn.betterspinner:library:1.1.0'

    implementation 'org.apache.httpcomponents:httpmime:4.3.6'

    implementation 'com.ajts.androidmads.sqliteimpex:library:1.0.0'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

10: 14 08/11/2019

Ранее я не упомянул использование useLibrary 'org.apache.http.legacy'

10: 22 11/11 / 2019

Я создал копию ошибки, которую я получаю в следующем проекте github .

Поэтому моя цель - иметь возможность компилировать и использовать следующие классы:

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;

Ответы [ 3 ]

1 голос
/ 12 ноября 2019

Опция 1:

Грейд уровня приложения

buildTypes {
        release {
            lintOptions {
                disable 'MissingTranslation'
                checkReleaseBuilds false
                abortOnError false
            }
            minifyEnabled false
            signingConfig signingConfigs.release
        }
    }

Опция 2:

Я бы не советовал отключать проверки на ворсинки, они там по причине. Вместо этого проверьте, что это за ошибка, и исправьте ее.

Отчет об ошибке сохраняется в [app module]/build/reports/lint-results-yourBuildName-fatal.html. Вы можете открыть этот файл в браузере, чтобы прочитать об ошибках.

Было бы неплохоесли Gradle может сделать немного более ясным, где генерируется отчет об ошибке.

0 голосов
/ 13 ноября 2019

Отключение Lint не является решением;лучше вообще удалить дублирующуюся зависимость:

implementation "org.apache.httpcomponents:httpmime:4.3.6"

и вместо этого предоставить ее ожидаемым образом («наследие» применимо, поскольку уровень API Android> = 23):

useLibrary "org.apache.http.legacy"

См. изменения поведения ... альтернативно, просто используйте HttpURLConnection, OkHttp или Retrofit.

org.apache.httpcomponents также можно использовать - но не оба пакетав то же время.


Один быстрый и грязный обходной путь, чтобы сохранить импорт точно таким же, был бы:

implementation "org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2"
0 голосов
/ 05 ноября 2019

Добавить это в приложение уровня gradle

 buildTypes {
        lintOptions {
            checkReleaseBuilds false
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

...