Android R8(Proguard) 参数名称已更改(我不想更改我的参数名称)
Android R8(Proguard) parameter name changed (i don't want change my parameter name)
我用agp(android gradle插件)7.0.4
在 运行 proguard -> 接口参数名称更改后
(com.android.tools.build:gradle:4.2.2版本未更改接口参数名称)
在 Gradle 4.2.2
public interface ITicketBoxCount {
public abstract fun callback(condition: kotlin.Int): kotlin.Unit
}
在 Gradle 7.0.4
public interface ITicketBoxCount {
void callback(int var1);
}
使用相同的“proguard_rules.txt”
-keep interface myinterfaceclass.** { *; }
我已经尝试“-keepparameternames”-> class参数名称未更改但接口参数名称已更改
我不想更改我的接口参数名称
请帮助我
额外
我制作了一个“.aar”(sdk) 文件
定义接口"ITicketBoxCount" -> make aar -> build time 运行 r8 -> 反编译aar -> ITicketBoxCount 接口参数名全部混淆
我想知道保留 interface
的目的是什么...但不是实现;例如:
-keep class ** implements ITicketBoxCount { *; }
这可能会进一步改进,因为通常只需要 public
方法而不是整个 class(它不是混淆文件 yes/no,但可以配置得非常精确人们想要保留哪些 classes 和方法)。
我在 R8 问题跟踪器中找到了原因
看来您使用的是 kotlin 1.6 版。与 AGP 7.0 捆绑的 R8 版本在 1.6 发布之前发布,无法读取元数据。结果,它将简单地丢弃它,因为它不能对它做任何事情。如果通过命令行编译,您还应该得到这些信息消息:
Info: Unexpected error while reading com.noimply.mymodule.ITicketCount's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.IUpdateNotification's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.MyModuleSDK's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.view.MainActivity's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.ILoginCallback's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.ITicketBoxCount's kotlin.Metadata: null
您将必须使用版本 3.0.77 或升级版或 R8 版本 3.1.X,它们目前处于候选发布状态。您可以通过将以下内容添加到顶级 build.gradle:
来设置特定版本
pluginManagement {
buildscript {
repositories {
mavenCentral()
maven {
url = uri("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath("com.android.tools:r8:3.0.77")
classpath('com.google.guava:guava:30.1.1-jre') // <-- THIS IS REQUIRED UNTIL R8 3.2.4-dev
}
}
}
如果您想知道为什么它会在 AGP 4.2 中工作,那是因为该版本的 R8 没有 kotlin 元数据的建模,只是通过它。
我用agp(android gradle插件)7.0.4 在 运行 proguard -> 接口参数名称更改后 (com.android.tools.build:gradle:4.2.2版本未更改接口参数名称)
在 Gradle 4.2.2
public interface ITicketBoxCount {
public abstract fun callback(condition: kotlin.Int): kotlin.Unit
}
在 Gradle 7.0.4
public interface ITicketBoxCount {
void callback(int var1);
}
使用相同的“proguard_rules.txt”
-keep interface myinterfaceclass.** { *; }
我已经尝试“-keepparameternames”-> class参数名称未更改但接口参数名称已更改
我不想更改我的接口参数名称 请帮助我
额外
我制作了一个“.aar”(sdk) 文件
定义接口"ITicketBoxCount" -> make aar -> build time 运行 r8 -> 反编译aar -> ITicketBoxCount 接口参数名全部混淆
我想知道保留 interface
的目的是什么...但不是实现;例如:
-keep class ** implements ITicketBoxCount { *; }
这可能会进一步改进,因为通常只需要 public
方法而不是整个 class(它不是混淆文件 yes/no,但可以配置得非常精确人们想要保留哪些 classes 和方法)。
我在 R8 问题跟踪器中找到了原因
看来您使用的是 kotlin 1.6 版。与 AGP 7.0 捆绑的 R8 版本在 1.6 发布之前发布,无法读取元数据。结果,它将简单地丢弃它,因为它不能对它做任何事情。如果通过命令行编译,您还应该得到这些信息消息:
Info: Unexpected error while reading com.noimply.mymodule.ITicketCount's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.IUpdateNotification's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.MyModuleSDK's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.view.MainActivity's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.ILoginCallback's kotlin.Metadata: null
Info: Unexpected error while reading com.noimply.mymodule.ITicketBoxCount's kotlin.Metadata: null
您将必须使用版本 3.0.77 或升级版或 R8 版本 3.1.X,它们目前处于候选发布状态。您可以通过将以下内容添加到顶级 build.gradle:
来设置特定版本pluginManagement {
buildscript {
repositories {
mavenCentral()
maven {
url = uri("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath("com.android.tools:r8:3.0.77")
classpath('com.google.guava:guava:30.1.1-jre') // <-- THIS IS REQUIRED UNTIL R8 3.2.4-dev
}
}
}
如果您想知道为什么它会在 AGP 4.2 中工作,那是因为该版本的 R8 没有 kotlin 元数据的建模,只是通过它。