Не знаю, почему Proguard/R8 удаляет определенный кодAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Не знаю, почему Proguard/R8 удаляет определенный код

Сообщение Anonymous »

Мы добавляем R8 в наше приложение для Android, чтобы удалить некоторый код из определенной зависимости, используемой нашим приложением. Наш файл правил proguard выглядит следующим образом:

Код: Выделить всё

-dontobfuscate
-dontoptimize

-keep class !com.kaltura.tvplayer.offline.**, !com.kaltura.android.exoplayer2.scheduler.**, !com.kaltura.android.exoplayer2.offline.**, !com.kaltura.tvplayer.OfflineManager { *; }

-printusage usage.txt
После создания нашего приложения и просмотра созданного файла use.txt мы видим, что код, который мы хотим удалить из зависимости, удален. Однако есть и другой код, который был удален, и мы не знаем, почему. Этот код показан ниже:

Код: Выделить всё

kotlinx.coroutines.debug.AgentPremain$$InternalSyntheticLambda$1$677acd6fb4ca1651eb1c76ebe61d8c1a9f5aeadf35534bff63c38388e03cb9a0$0:
public final void handle(sun.misc.Signal)
kotlinx.coroutines.debug.AgentPremain:
public static synthetic void $r8$lambda$qtwhjy3HAlNEjQH7oAL6W8vp2zY(sun.misc.Signal)
com.google.android.material.checkbox.MaterialCheckBox$$InternalSyntheticLambda$1$a66ca6c6de65b4f256ca2f0a8ce6032afe507a77d8c42ef3015c9db612807b7a$0
com.google.android.material.checkbox.MaterialCheckBox:
public static synthetic void $r8$lambda$hE-Ehj__sZakT88clijs-fYFgxg(com.google.android.material.checkbox.MaterialCheckBox)
io.reactivex.rxjava3.internal.jdk8.ObservableFlatMapStream$FlatMapStreamObserver$$InternalSyntheticApiModelOutline$1$87977bb73faf46839e24319ed6c7f5e872a83d3099d0adb8f3afc970e63deb06$2
io.reactivex.rxjava3.internal.jdk8.ObservableFlatMapStream$FlatMapStreamObserver$$InternalSyntheticApiModelOutline$1$87977bb73faf46839e24319ed6c7f5e872a83d3099d0adb8f3afc970e63deb06$5
org.apache.commons.io.file.PathUtils$$InternalSyntheticApiModelOutline$1$778588db3304f74caa63c13b87cbf3c380b7de57d734f860afc58cfef4c8cf73$2
org.apache.commons.io.file.PathUtils$$InternalSyntheticApiModelOutline$1$778588db3304f74caa63c13b87cbf3c380b7de57d734f860afc58cfef4c8cf73$5
org.apache.commons.io.filefilter.EmptyFileFilter$$InternalSyntheticApiModelOutline$1$95abaa9ca0d4f21097e19aae95cd518500ff56bb37279c94168ab66f95dc3506$4
org.apache.commons.io.filefilter.EmptyFileFilter$$InternalSyntheticApiModelOutline$1$95abaa9ca0d4f21097e19aae95cd518500ff56bb37279c94168ab66f95dc3506$7
Даже если мы обновим файл proguard-rules, включив в него оператор Keep, охватывающий все классы (как показано ниже), файл Usage.txt по-прежнему показывает, что тот же код удаляется

Код: Выделить всё

-dontobfuscate
-dontoptimize

-keep class ** { *; }

-printusage usage.txt
Мы попробовали несколько разных способов решить эту проблему.
Сначала, как описано выше, мы добавили оператор Keep, чтобы сохранить все классы в качестве проверки работоспособности -keep class ** { *; } . Мы были удивлены, обнаружив в нашем файле use.txt, что код все еще удаляется после его добавления.
Мы также попытались добавить определенные правила сохранения, чтобы гарантировать, что определенный код не был удален (как показано ниже). Эти правила хранения также не повлияли на удаляемый код.

Код: Выделить всё

-keep class org.apache.commons.io.file.PathUtils** { *; }

Код: Выделить всё

-keep class com.google.android.material.** { *; }
Кто-нибудь знает, почему этот код может быть удален и что мы можем добавить в наш файл правил proguard, чтобы предотвратить его удаление?>

Подробнее здесь: https://stackoverflow.com/questions/790 ... rtain-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»