Tôi đang làm việc để tích hợp proguard để xây dựng gradle cho một ứng dụng được viết bằng Kotlin. Tôi thấy rằng proguard đang loại bỏ thư viện chuẩn Kotlin (như trong chương trình Hello World đơn giản của tôi) nhưng nó để lại một loạt các tệp trong jar của tôi có phần mở rộng là .kotlin_builtins
. Khi tôi cấu hình nhiệm vụ gradle của mình để loại trừ các tệp đó, chương trình vẫn hoạt động tốt. Các tệp đó là gì và chúng phải được gửi bằng uberjar thực thi của tôi?Các tệp .kotlin_builtins là gì và tôi có thể bỏ qua chúng khỏi các uberjars của tôi không?
Dưới đây là nội dung build.gradle
tập tin của tôi để tham khảo:
buildscript {
ext.kotlin_version = '1.0.5'
ext.shadow_version = '1.2.4'
repositories {
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
flatDir dirs: "gradle/proguard"
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.github.jengelman.gradle.plugins:shadow:$shadow_version"
classpath ":proguard:"
}
}
apply plugin: 'kotlin'
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'
mainClassName = 'namespace.MainKt'
defaultTasks 'run'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
testCompile "junit:junit:4.12"
testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
}
shadowJar {
exclude 'kotlin/**/*.kotlin_builtins'
exclude '.keep'
}
task minify(type: proguard.gradle.ProGuardTask, dependsOn: 'shadowJar') {
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
injars 'build/libs/artful-all.jar'
outjars 'build/libs/artful-all.out.jar'
printmapping 'build/libs/out.map'
keepclasseswithmembers 'public class * { \
public static void main(java.lang.String[]); \
}'
assumenosideeffects 'class kotlin.jvm.internal.Intrinsics { \
static void checkParameterIsNotNull(java.lang.Object, java.lang.String); \
}'
}