У меня проблема. У меня есть структура проекта, глядя, как это:
P
| -SubP1
| -SubP2Исключить класс из полученного файла dex
Есть две тупиковые классы android.media.IRemoteDisplay в обоих пакетах. Они отличаются в реализации, но это не вопрос - они будут заменены системными классами, когда я запустил приложение на Android.
Однако есть проблема - я не могу построить проект, потому что dexMerger терпит неудачу - он говорит, что есть два конфликтующих класса. Я могу понять, что ошибка - в конце концов, на самом деле есть две противоречащие друг другу классы :)
Но когда я пытаюсь исключить эти файлы в build.gradle так:
sourceSets {
main {
java {
srcDir 'src'
exclude '**/android/media/**'
}
}
}
компиляция терпит неудачу, потому что это может» t find android.media.IRemoteControlDisplay класс (и это вложенные классы).
Как я могу использовать эти классы, но исключать их из результирующего файла DEX?
Пожалуйста НЕ вопрос, если это право исключить класс из скомпилированного проекта - это то, что нужно сделать, я уже сделал это, но вручную - путем предварительной компиляции SubP1 и SubP2 в банках, а затем вручную удалить IRemoteController.class из этих кувшины файлов, а затем в том числе тех банков в P.
Я также буду доволен этим решением:
1. Построить SubP1
2. Удалить IRemoteControlDisplay.class из SubP1.jar
3 . Build SubP2
4. Удалить IRemoteControlDisplay.cla ss from SubP2.jar
5. Добавить SubP1.jar и SubP2.jar как зависимости от P
6. Build P
Если это возможно, сообщите нам об этом.
Если вы не включили его в DEX, приложение будет принудительно закрываться, потому что оно не найдет класс, который он хочет использовать. –
Почему вы исключаете всю папку, а не только этот конкретный класс/файл? – Jim
Eugen, я знаю, что я делаю. Приложение не приведет к сбою, потому что IRemoteControlDisplay - это класс, который присутствует в системном пакете android.media.Обычно вы не можете получить к нему доступ, но мне нужно получить к нему доступ, и я сделал это, создав класс-заглушку с теми же сигнатурами методов. Таким образом, исключив его, приложение совершит вызовы для реализации системы. BTW, я уже сделал это - компилируя банки и удаляя файлы .class оттуда, а затем включаю те банки в проекте. Но теперь я хочу сохранить его более автоматическим. –