Android Головные боли в режиме AIDL, Proguard, Debug и Release - PullRequest
1 голос
/ 02 апреля 2020

Эта проблема МОЖЕТ быть следствием того факта, что мои APK-файлы службы IP C (которые должны запускаться как независимые процессы) настроены как модуль в Android Studio вместо отдельного проекта , Проект содержит приложение и три модуля, один модуль представляет собой библиотеку Bluetooth, а два других модуля создают автономные APK-сервисы IP C. Службы используются библиотекой Bluetooth через AIDL. В режиме отладки я могу установить службы из Android Studio как APK без активности. Я также могу установить основное приложение, которое использует библиотеку Bluetooth из Android Studio. Он отлично работает в режиме отладки.

Но как только я пытаюсь собрать весь проект в режиме выпуска, я получаю ошибку сборки, когда пытаюсь установить службу (а не основное приложение), которую используют API AIDL. дублируются (в каталоге «build» библиотеки Bluetooth существует такой же файл classes.jar, что и в каталоге сборки службы). Фактическое сообщение:

Type com.pcha.proprietary.handler.IConnectionCallback$Default is defined multiple times:

Кто-нибудь это понимает? Я предполагаю, что если бы я сделал сервис отдельным проектом (который в Android Studio должен появиться в отдельном окне, что является болью), то это было бы хорошо.

I иметь последнюю версию AS от 4/2/2020

Я попытался удалить копии файлов AIDL в служебных модулях IP C и указал на один файл AIDL в основной службе Bluetooth. Еще раз это работало в режиме отладки, но как только я перешел на выпуск, я получаю ту же самую определенную ошибку несколько раз.

Некоторый прогресс : В каждой из служб IP C Я удалил каталог AIDL и в файле gradle.build исключил любые ссылки на файлы aidl в исходных наборах. Это позволяет мне строить в режиме выпуска И режиме отладки, но IP C и основные службы работают, только если minifyEnabled false. В minfiyEnabled true основная служба не находит службы IP C.

1 Ответ

0 голосов
/ 24 апреля 2020

Проблема была сложнее, чем я думал. В режиме отладки, кажется, можно сойти с рук что угодно. Но не выпуск.

В проекте есть одно приложение, которое использует библиотечную службу Bluetooth и две службы IP C. Однако службы IP C построены как модуль в том же проекте. Почему? Android Студия в не Eclipse - только один проект на окно! Модули, однако, создает проблемы. Но вот как заставить его работать в релизе с минимизацией proguard:

  1. Нет копий файлов AIDL в двух сервисах IP C с двумя модулями (как нужно, если они были построены как отдельные проекты)
  2. Не указывайте файлы AIDL в файлах Gradle служб IP C (как это необходимо сделать в независимом проекте).

Это позволит встроенный выпуск, разверните два APK-файла службы IP C и приложение и запустите его, ЕСЛИ 'minifyEnabled false' установлен в каждом из четырех файлов build.gradle.

Если вы хотите установить 'minifyEnabled true 'чтобы уменьшить размер APK приложения, сделайте это ТОЛЬКО в файле build.gradle приложения. Однако обязательно сохраняйте каждый интерфейс и объект AIDL, которые вы определили. Например, в моем локальном файле proguard:

-keep class com.pcha.proprietary.handler.IConnectionCallback
-keep class com.pcha.proprietary.handler.IStatusEventCallback
-keep class com.pcha.proprietary.handler.IIntermediaryCallback
-keep class com.pcha.proprietary.handler.ILogCallback
-keep class com.pcha.btmanager.PhdInformation
-keep class com.pcha.btmanager.ProprietaryDriverPhdInfo
-keep class com.lni.codephg.inter.MdsIntermediary
-keep class com.lni.codephg.inter.CompoundEntry
-keep class com.lni.codephg.inter.EnumEntry
-keep class com.lni.codephg.inter.Facets
-keep class com.lni.codephg.inter.NumericEntry
-keep class com.lni.codephg.inter.ProfuctionSpecOid
-keep class com.lni.codephg.inter.RtsaEntry
-keep class com.lni.codephg.inter.SpecializationStruct
-keep class com.lni.codephg.fhir.MderFloat
-keep class com.lni.codephg.inter.TimeStruct

Чтобы минимизировать aars Библиотеки Bluetooth и APK-файлы службы IP C, требуется больше работы, которую необходимо выполнять независимо от сборки. Сокращение библиотек aars / jars требует второй обработки собранных файлов ... по крайней мере, я не знаю другого способа сделать это.

Однако это выходит за рамки первоначального вопроса, но все же я хочу кое-что сделать. Ищите любую помощь и дальнейшее понимание этого беспорядка.

...