Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Kotlin为Android发布版本配置ProGuard_Android_Kotlin_Proguard_Android Proguard - Fatal编程技术网

如何使用Kotlin为Android发布版本配置ProGuard

如何使用Kotlin为Android发布版本配置ProGuard,android,kotlin,proguard,android-proguard,Android,Kotlin,Proguard,Android Proguard,我将Kotlin 1.2.71添加到我的Android(Java)应用程序项目中。 该项目是为Java 8配置的: compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 以下是Kotlin的变化: classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71"

我将Kotlin 1.2.71添加到我的Android(Java)应用程序项目中。 该项目是为Java 8配置的:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
以下是Kotlin的变化:

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71"

我注意到带有ProGuard的发布版本失败了。构建过程输出以下信息:

警告:kotlin.internal.jdk8.jdk8平台实现:找不到引用的
库类java.util.regex.Matcher中的方法“int start(java.lang.String)”
警告:kotlin.internal.jdk8.jdk8平台实现:找不到引用的
库类java.util.regex.Matcher中的方法“int end(java.lang.String)”
警告:kotlin.internal.jdk8.jdk8平台实现:找不到引用的
库类java.util.regex.Matcher中的方法“java.lang.String组(java.lang.String)”
注意:kotlin.internal.platformimplementskt:无法动态查找
引用类kotlin.internal.jre8platformimplements
注意:kotlin.internal.platformimplementskt:无法动态查找
引用类kotlin.internal.jre7platformimplements
注意:kotlin.jvm.internal.Reflection:无法动态查找
引用的类kotlin.reflect.jvm.internal.ReflectionFactoryImpl
注意:配置保留入口点
'com.google.android.gms.flags.impl.FlagProviderImpl{void init(com.google.android.gms.dynamic.zzd);}',
但不是描述符类“com.google.android.gms.dynamic.zzd”
注意:在保留的类成员中有1个unkept描述符类。
你应该考虑清楚地保留所提到的类。
(使用“-keep”)。
(http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
注意:有3个未解析的类或接口动态引用。
您应该检查是否需要指定其他程序JAR。
(http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
警告:有3个对库类成员的未解析引用。
您可能需要更新库版本。
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
警告:处理任务java.io时出现异常。IOException:请先更正上述警告。
线程(任务限制器9):销毁
据我所知,Kotlin不需要任何特殊的ProGuard规则。(2015年发布)简单地说就是规则:

-dontwarn kotlin.**
这仍然是推荐的解决方案吗

相关的

查看实际警告会告诉您在java标准库中找不到特定的方法

引用表明,该方法仅在minSdk为
26
时可用。这是添加Java-8支持时的SDK级别


简单地说,您试图将java8级别的kotlin库与不支持它的android sdk一起使用,这导致了您观察到的错误。

不确定在android上使用
kotlin-stdlib-jdk8
是一个好主意,因为除非您使用
MinsdkVersion24
,否则无法完全支持jdk8类,看-你的错误看起来可能就是问题所在。尝试
kotlin-stdlib-jdk7
这应该不是问题,因为我在
build.gradle
配置中也使用
compileOptions{sourceCompatibility JavaVersion.VERSION\u 1\u 8 targetCompatibility JavaVersion.VERSION\u 1\u 8}
,这是不同的。android版本使用工具将Java8语法/类文件转换为java7或更低版本(android)的dex文件。请参阅上面的链接,了解在哪个api级别上可用的内容。该工具无法模拟该api级别中不存在的方法。例如,它可以模仿lambdas。为我的骄傲感到抱歉。使用
kotlin-stdlib-jdk7
实际上可以让发布构建成功。非常感谢。谢谢你的描述性解释!
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.71"
kapt "org.parceler:parceler:1.1.11"
-dontwarn kotlin.**