Android studio не очищает зависимости после очистки Gradle

#java #android #gradle #deeplearning4j

#java #Android #gradle #deeplearning4j

Вопрос:

Я пытаюсь использовать deeplearning4j на устройстве Android, переключаясь между отладкой на эмуляторе и физическом устройстве. Для этого у меня есть несколько зависимостей огромного размера, и все они необходимы. К счастью, для каждой платформы, предоставляемой org.bytedeco .

Поэтому, ориентируясь на Android arm-64, которые являются наиболее распространенными, я опустил другие платформы, такие как

 //    implementation group: 'org.nd4j', name: 'nd4j-native', version: '1.0.0-beta6', classifier: "android-x86_64" //for emulator
  

.

Требуемые зависимости похожи:

 implementation (group: 'org.deeplearning4j', name: 'deeplearning4j-core', version: '1.0.0-beta7') {
    exclude group: 'org.bytedeco', module: 'opencv-platform'
    exclude group: 'org.bytedeco', module: 'leptonica-platform'
    exclude group: 'org.bytedeco', module: 'hdf5-platform'
}
implementation group: 'org.nd4j', name: 'nd4j-native', version: '1.0.0-beta7'
implementation group: 'org.bytedeco', name: 'openblas', version: '0.3.9-1.5.3'
implementation group: 'org.bytedeco', name: 'opencv', version: '4.3.0-1.5.3'
implementation group: 'org.bytedeco', name: 'leptonica', version: '1.79.0-1.5.3' 

implementation group: 'org.nd4j', name: 'nd4j-native', version: '1.0.0-beta7', classifier: "android-arm64"
implementation group: 'org.bytedeco', name: 'openblas', version: '0.3.9-1.5.3', classifier: "android-arm64"
implementation group: 'org.bytedeco', name: 'opencv', version: '4.3.0-1.5.3', classifier: "android-arm64"
implementation group: 'org.bytedeco', name: 'leptonica', version: '1.79.0-1.5.3', classifier: "android-arm64"
  

Проблема в том, что когда я создаю или очищаю и создаю выходной файл Jar, он огромен, он составляет более 800 МБ, и если я вижу дерево зависимостей, я всегда вижу другие платформы jar в path, например:

введите описание изображения здесь

Я знаю, что не все из них необходимы, потому что в какой-то момент времени (и я не мог воспроизвести то, что присутствовало, и к чему я стремлюсь снова) У меня были не все эти зависимости. Экспортированный APK-файл составлял около 400 Мб.

Итак, что случилось с Windows, Linux, зависимостями…

Синхронизация проекта и сборка Gradle clean Gradle ничего не делают с ними, также экспортируя APK. Всегда APK> 800 МБ

Редактировать:

Пожалуйста, не обращайте внимания на несоответствие версий между различными зависимостями и API и реализациями. Я переключаюсь между версиями dl4j beta6, dl4j beta7 и другими

Комментарии:

1. Вы получите это, если будете зависеть от зависимостей от платформы. Обязательно исключите все, что заканчивается на -platform . Существует также простой способ манипулировать ими с помощью Gradle JavaCPP: github.com/bytedeco/gradle-javacpp#the-platform-plugin

2. Какие здесь зависимости от платформы? Здесь не используется ключевое слово classifier для точного указания платформы. Спасибо

3. Это было решение, с 800 МБ до 200. Спасибо

4. Да, для этого используется классификатор, но артефакты, заканчивающиеся на «-platform», содержат зависимости для всех из них.