Intereting Posts
Android hdpi / mdpi / ldpi для папки «Значения»? Открыть приложение для Android от уведомления PUSH Android draggable ImageVIew Пока не удалось достичь Gapless аудио-цикла на Android Android – Изменение базы данных наблюдателя с помощью ORM GreenDao Android SQLite Exception: невозможно закрыть из-за нефинализированных операторов Откройте EditTextPreference с помощью кода (программно) Не удалось решить: android.arch.lifecycle: extensions: 1.0.0-alpha1 android studio 3.0 Попытка исправить андроиды «плохое или ошибочное использование основного класса» пошло плохо Часы Emulator не соответствуют часам системы хоста Применить оттенок к виджетам PreferenceActivity с помощью AppCompat v21 Android ADB: имитировать недавнее нажатие клавиши приложения Как изменить частоту кадров камеры для создания замедленного или временного видео в Android Как просмотреть вывод Android LogCat из экспортированного APK, работающего на физическом устройстве? Как создать общий код для частей деятельности Android?

Удалить внешнюю библиотеку из obfuscated classes.jar (в Android Studio / Gradle)

Я создал андроидную библиотеку (используя Android Studio), которая импортирует внешний .jar-файл (содержащий только интерфейсы) для правильной сборки. Но окончательный файл библиотеки не должен включать этот файл, так как основной проект приложения будет содержать файл .jar, который уже содержит эти классы интерфейса, содержащиеся во внешней библиотеке. Если я оставлю файл внутри, компилятор будет жаловаться на «несколько файлов dex files …».

Я могу автоматически удалить внешнюю библиотеку .jar из .aar с помощью градиента следующим образом:

android.libraryVariants.all { variant -> variant.outputs.each { output -> def packageLib = output.getPackageLibrary() packageLib.exclude('libs/externalLibrary.jar') } } 

Но если библиотека запуталась с помощью ProGuard (minifyEnabled true) , все файлы классов из внешней библиотеки добавляются в class.jar перед ее вложением в файл .aar и поэтому не могут быть исключены таким образом.

Я могу редактировать файл classes.jar и автоматически удалять файлы из него с помощью градиента следующим образом:

 task makeRelease(type: Jar) { baseName='changedClasses' destinationDir=file('../../release/') from zipTree('build/intermediates/bundles/release/classes.jar') exclude "com/externallibrary/**" } 

Который работает при выполнении этой задачи после завершения сборки библиотеки. Но мне нужно будет запустить эту задачу после завершения задачи proguard, но до того, как файлы будут упакованы в окончательный .aar, чтобы автоматически создавать и запускать окончательное приложение. И я пока не нашел способа сделать это до сих пор …

Поэтому: как я могу автоматически удалять файлы из класса.jar, которые включены в окончательный файл .aar? Или, может быть, я ошибаюсь в этом, есть ли другой способ решить мою проблему, например, сообщать proguard, чтобы они не включали файлы в classes.jar?

В ваших зависимостях вместо того, чтобы писать «компилировать» запись «предоставлено», что означает, что вещь, которую вы компилируете, предназначена только для получения справки, а не для упаковки.