При выпуске библиотеки Android - R8 вырезает значительные части `*.class`, что делает ее непригодным для использования вAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 При выпуске библиотеки Android - R8 вырезает значительные части `*.class`, что делает ее непригодным для использования в

Сообщение Anonymous »

Я сталкиваюсь с довольно нишевой проблемой после обновления AGP с 8.3.2 до 8.8.2 в нашем мультимодульном проекте, который мы используем для выпуска определенного SDK.
Мы имеем IsminifyEnabled в True в наших библиотечных модулях, потому что мы раскрываем API, соответствующий нашим клиентам. />

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

object LoggerProvider {

@JvmStatic
var logger: Logger = StubLogger()
}
< /code>
предназначен для использования, например, например:
   private val myLoggerFromThatSdk = LoggerProvider.logger< /code> < /p>
И это было до наше обновление от AGP 8.3.2 до 8.8.2.
Также, если вы выполните команду + нажмите на часть.public object LoggerProvider {
@kotlin.jvm.JvmStatic public final var logger: com.example.sdk.util.log.Logger /* compiled code */
}
< /code>
Это означает, что он был признан как класс Kotlin.
Также, на данный момент, если вы нажмете DeCompile на Java, код будет выглядеть следующим образом: < /p>
@Metadata(
mv = {2, 1, 0},
k = 1,
xi = 48,
d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0006\bÆ\u0002\u0018\u00002\u00020\u0001B\t\b\u0002¢\u0006\u0004\b\u0002\u0010\u0003R$\u0010\u0004\u001a\u00020\u00058\u0006@\u0006X\u0087\u000e¢\u0006\u0014\n\u0000\u0012\u0004\b\u0006\u0010\u0003\u001a\u0004\b\u0007\u0010\b\"\u0004\b\t\u0010\n¨\u0006\u000b"},
d2 = {"Lcom/example/sdk/util/log/LoggerProvider;", "", "", "()V", "logger", "Lcom/example/sdk/util/log/Logger;", "getLogger$annotations", "getLogger", "()Lcom/example/sdk/util/log/Logger;", "setLogger", "(Lcom/example/sdk/util/log/Logger;)V", "Sources of com-example-sdk-android.core-base.main"}
)
public final class LoggerProvider {
@NotNull
public static final LoggerProvider INSTANCE = new LoggerProvider();
@NotNull
private static Logger logger = (Logger)(new StubLogger());

private LoggerProvider() { }

@NotNull
public static final Logger getLogger() { return logger; }

public static final void setLogger(@NotNull Logger var0) {
Intrinsics.checkNotNullParameter(var0, "");
logger = var0;
}

/** @deprecated */
// $FF: synthetic method
@JvmStatic
public static void getLogger$annotations() { }
}
< /code>
Однако после обновления этого нового AGP Line LoggerProvider.logger дает ошибку компиляции в части Logger. Если вы нажмете на него, вы видите этот декомпилированный класс (не котлин один-Java одновременно!): < /P>
public final class LoggerProvider {
@NotNull
public static final LoggerProvider INSTANCE = new LoggerProvider();
@NotNull
private static Logger logger = new StubLogger();

private LoggerProvider() { }

@NotNull
public static final Logger getLogger() { return logger; }

public static final void setLogger(@NotNull Logger var0) {
Intrinsics.checkNotNullParameter(var0, "");
logger = var0;
}
}
< /code>
Обратите внимание на метаданные и этот метод отсутствует: < /p>
   /** @deprecated */
// $FF: synthetic method
@JvmStatic
public static void getLogger$annotations() { }
Я подозреваю, что более новый, более строгий R8 связан с этим новым AGP, но я не мог найти никаких упоминаний о соответствующей информации или дискуссиях в Интернете об этом. Основная логика этого.
Наши *.pro файлы имели опцию -donkshrink , включенная в течение многих лет назад.
Удивительно, сохраняя его после обновления до AGP 8.8.2 (или выше. Бьюсь о некоторых более низких версиях, но я тоже не проверял это. Ушел.
Если кто -то понимает, почему - вы можете поделиться. < /p>

Подробнее здесь: https://stackoverflow.com/questions/796 ... parts-of-c
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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