无法使用Android Gradle插件3.0.1解析assembleAndroidTest任务的依赖项
我正在更新我们的项目,使用Gradle4.1和Android Gradle插件3.0.1。我已将依赖项配置更新为,项目已成功编译。然而,在编译android测试(无法使用Android Gradle插件3.0.1解析assembleAndroidTest任务的依赖项,android,gradle,kotlin,Android,Gradle,Kotlin,我正在更新我们的项目,使用Gradle4.1和Android Gradle插件3.0.1。我已将依赖项配置更新为,项目已成功编译。然而,在编译android测试(assembleAndroidTestGradle任务)时,存在许多未解决的依赖项(包括Kotlin标准库的顶级函数)。我怀疑Proguard可能会导致这种情况(尽管它在更新Gradle之前没有),但即使添加显式规则来保留符号/类也无济于事。我们使用Kotlin1.2.10和KotlinKapt插件 非常感谢您的帮助。我不使用ProGu
assembleAndroidTest
Gradle任务)时,存在许多未解决的依赖项(包括Kotlin标准库的顶级函数)。我怀疑Proguard可能会导致这种情况(尽管它在更新Gradle之前没有),但即使添加显式规则来保留符号/类也无济于事。我们使用Kotlin1.2.10和KotlinKapt插件
非常感谢您的帮助。我不使用ProGuard进行调试,但以下答案似乎很有用。 根据迁移指南,我将在另一次修改Gradle配置,首先清理缓存并使其无效 前卫 检查此项以及如何将Kotlin与Proguard一起使用 在
build.gradle
文件中禁用这些指令以放弃Proguard。
minifyEnabled false
shrinkResources false
为Kotlin配置Proguard。
minifyEnabled false
shrinkResources false
你不需要做任何特别的事情。Kotlin与ProGuard out合作
盒子的底部。但在处理数据时,您可能会遇到一些奇怪的错误
使用ProGuard应用程序。在这种情况下,只需添加:
-dontwarn kotlin.**
您还可以添加:
-keep class kotlin.** { *; }
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
<fields>;
}
-keepclassmembers class kotlin.Metadata {
public <methods>;
}
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
}
添加自定义的proguard规则文件
/project/app/proguard测试规则.pro
# Proguard rules that are applied to your test apk/code.
-ignorewarnings
-keepattributes *Annotation*
-dontnote junit.framework.**
-dontnote junit.runner.**
-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**
-dontwarn org.hamcrest.**
-dontwarn com.squareup.javawriter.JavaWriter
# Uncomment this if you use Mockito
#-dontwarn org.mockito.**
The add the following to your build.gradle for your app. To use the proguard file when testing.
/project/app/build.gradle
android {
debug {
minifyEnabled true
testProguardFile 'proguard-test-rules.pro'
}
}
添加用于测试的内置类型
我在构建中通过增加一个“dev”解决了这个问题
buildType,其中我启用proguard,但将其配置为保留所有代码
在我自己的包中,还有一些特定的库类
只能从测试中使用。我还禁用了dev中的模糊处理
buildType,以便可以从IDE对其进行调试
对于调试和发布版本,我使用我的“真实”proguard设置
包括模糊处理和优化
使用单独的测试模块
我们现在知道了变异。这意味着
不再需要指定targetVariant
测试模块中的每个变量都将尝试测试匹配
目标项目中的变量。默认情况下,测试模块仅包含
调试变量,但您可以创建新的构建类型和新的风格来
创建新的变体以匹配测试的应用程序项目。连接支票
为每个变量创建任务
使测试模块只测试不同的生成类型,而不测试
调试一,使用VariantFilter在测试中禁用调试变量
项目,如下所示:
android {
variantFilter { variant ->
if (variant.buildType.name.equals('debug')) {
variant.setIgnore(true);
}
}
}
如果您希望测试模块只针对特定的风格或构建
应用程序的类型,您可以使用该属性设置目标
仅限要测试的变体。这也防止了测试模块的损坏
不必为自己配置这些变体
格拉德尔 修改你的渐变配置。为了:
- 设置
gradle插件并将其应用于您的项目kotlin android
- 添加
依赖项kotlin stdlib
科特林机器人
科特林标准实验室 别忘了配置: 使用修改依赖项配置 注意:
编译
,提供
,以及apk
目前仍然可用
但是,它们将在的下一个主要版本中删除
Android插件
手动提供版本 从Kotlin 1.1.2开始,具有组的依赖项 默认情况下,
org.jetbrains.kotlin
与所采用的版本一起解析
从应用插件
您可以使用完全依赖项手动提供版本
这样的符号:
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
解决策略 您还可以: 当您使用时: 使用变体API从测试配置中排除应用依赖项:
android.testVariants.all { variant ->
variant.getCompileConfiguration().exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
variant.getRuntimeConfiguration().exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
}
在以前版本的Android插件上,您可以排除某些
使用exclude
关键词。但是,对于新的依赖项配置,您必须这样做
它在执行时使用变量API:
android.testVariants.all { variant ->
variant.getCompileConfiguration().exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
variant.getRuntimeConfiguration().exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
}
Kotlin标准库的扩展版本 如果您的目标是JDK 7或JDK 8,则可以使用的扩展版本 包含附加扩展的Kotlin标准库 新JDK版本中添加的API函数。而不是
kotlin stdlib
,使用以下依赖项之一:
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
在Kotlin 1.1.x中使用Kotlin-stdlib-jre7
和Kotlin-stdlib-jre8
相反
科特林反射 如果您的项目使用 或者测试设施,您需要添加相应的依赖项 以及:
compile "org.jetbrains.kotlin:kotlin-reflect"
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit"
卡普特 请参阅(
kapt
)的说明
应用kotlin-kapt
Gradle插件:
apply plugin: 'kotlin-kapt'
Proguard不用于测试。它应该。否则,您如何知道您的代码不会在运行时由于proguard问题而崩溃?在组装apk进行发布而不是测试构建时,会调用proguard。
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
compile "org.jetbrains.kotlin:kotlin-reflect"
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit"
apply plugin: 'kotlin-kapt'