小编ADe*_*Dev的帖子

在Kotlin中,如何检查包含一个或另一个值?

在Kotlin,我们可以做到:

val arr = intArrayOf(1,2,3)
if (2 in arr)
   println("in list")
Run Code Online (Sandbox Code Playgroud)

但是,如果我想检查2 3是否在arr,除了以下之外,最常用的方法是:

if (2 in arr || 3 in arr)
   println("in list")
Run Code Online (Sandbox Code Playgroud)

arrays kotlin

20
推荐指数
5
解决办法
1万
查看次数

Android数据绑定依赖项与支持库冲突

我正在尝试在我的Android项目中设置数据绑定,如下所示:

dataBinding {
    enabled = true
}
Run Code Online (Sandbox Code Playgroud)

但是,当我添加支持库依赖项时,lint会抱怨:

所有com.android.support库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃).发现版本25.1.0,21.0.3.示例包括'com.android.support:animated-vector-drawable:25.1.0'和'com.android.support:support-v4:21.0.3'

当我跑步时./gradlew app:dependencies,我得到以下内容:

...
+--- com.android.support:appcompat-v7:25.1.0
|    +--- com.android.support:support-annotations:25.1.0
|    +--- com.android.support:support-v4:25.1.0
|    |    +--- com.android.support:support-compat:25.1.0 (*)
|    |    +--- com.android.support:support-media-compat:25.1.0
|    |    |    +--- com.android.support:support-annotations:25.1.0
|    |    |    \--- com.android.support:support-compat:25.1.0 (*)
|    |    +--- com.android.support:support-core-utils:25.1.0
|    |    |    +--- com.android.support:support-annotations:25.1.0
|    |    |    \--- com.android.support:support-compat:25.1.0 (*)
|    |    +--- com.android.support:support-core-ui:25.1.0 (*)
|    |    \--- com.android.support:support-fragment:25.1.0
|    |         +--- com.android.support:support-compat:25.1.0 (*)
|    |         +--- com.android.support:support-media-compat:25.1.0 (*)
|    |         +--- com.android.support:support-core-ui:25.1.0 …
Run Code Online (Sandbox Code Playgroud)

android lint gradle

18
推荐指数
1
解决办法
2583
查看次数

即使没有任何更改,Android多模块Gradle构建速度也很慢

我有一个包含多个模块的Android项目,即使我尝试重建它而不改变任何东西,构建时间也很慢.

其结构类似于:

简化的项目设置

有更多的"父"(和独立的父兄弟姐妹)和"功能"模块,但设置是图片的设置.

我的gradle.properties文件如下:

org.gradle.jvmargs=-Xmx4096m -Xms2048m
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.configureondemand=true
Run Code Online (Sandbox Code Playgroud)

我使用的是Gradle版本3.5和插件版本2.4.0-alpha7.

该项目还使用multidex(javaMaxHeapSize "4g"jumboMode true),数据绑定,kotlin和java以及几个注释处理器.

在构建时,我可以看到多个线程并行运行不同的任务,对于大多数项目来说,除了主要用于最终的"app"模块(我认为是正常的).

但是很多时候似乎花在了不同的:: compileJavaWithJavac任务上.即使没有改变任何东西,在配备16 Gb RAM的MacBook Pro i7上构建也需要大约30秒.

如果我在功能模块的方法中更改了一行代码(甚至没有更改方法的签名),则构建时间超过1:30分钟.

这些正常时期?有什么我可以进一步优化以改善构建时间吗?

我还检查了一些其他答案:

  • 从这一个,设置preDexLibraries = false没有帮助,我已经使用assembleDebug
  • incremental = true这里建议不起作用,不推荐使用
  • 禁用即时运行似乎有点帮助但不多
  • 上面讨论的项目的构建风格已经确定 minSdkVersion 21

android gradle android-studio android-gradle-plugin

10
推荐指数
1
解决办法
442
查看次数

运行androidConnectedTest时修复"无法desugar invokedynamic"

我的Android应用程序使用Java 8 lambdas,如下所示:

myView.setOnClickListener(view -> someMethod());
Run Code Online (Sandbox Code Playgroud)

在构建应用程序或运行单元测试时,一切正常.但是,当我运行时./gradlew connectedAndroidTest,我收到以下错误:

Execution failed for task ':myModule:transformClassesWithDesugarForDebugAndroidTest'.

Exception in thread "main" java.lang.IllegalStateException: Couldn't desugar invokedynamic for com/.../MyActivity.onClick using java/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; (6) with arguments [(Landroid/view/View;)V, com/.../MyActivity.lambda$onViewBound$0(Landroid/view/View;)V (7), (Landroid/view/View;)V]
    at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.visitInvokeDynamicInsn(LambdaDesugaring.java:474)
    at org.objectweb.asm.ClassReader.readCode(ClassReader.java:1623)
    at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1126)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:698)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:500)
    at com.google.devtools.build.android.desugar.Desugar.desugarClassesInInput(Desugar.java:477)
    at com.google.devtools.build.android.desugar.Desugar.desugarOneInput(Desugar.java:361)
    at com.google.devtools.build.android.desugar.Desugar.desugar(Desugar.java:314)
    at com.google.devtools.build.android.desugar.Desugar.main(Desugar.java:711)
Caused by: java.lang.IllegalAccessException: no such method: com...MyActivity.lambda$onViewBound$0(View)void/invokeSpecial
    at java.lang.invoke.MemberName.makeAccessException(MemberName.java:867)
    at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1003)
    at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1386)
    at java.lang.invoke.MethodHandles$Lookup.findSpecial(MethodHandles.java:1004)
    at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.toMethodHandle(LambdaDesugaring.java:670)
    at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.toJvmMetatype(LambdaDesugaring.java:647)
    at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.visitInvokeDynamicInsn(LambdaDesugaring.java:408)
    ... 8 more
Caused by: java.lang.NoClassDefFoundError: com/.../databinding/MyActivityBinding …
Run Code Online (Sandbox Code Playgroud)

lambda android android-testing android-gradle-plugin

10
推荐指数
1
解决办法
1330
查看次数

如何将Kotlin代码引用从函数更改为intellij插件中的字段?

我正在编写一个intellij插件,我正在重构一个类,将其getters(例如fun name(): String)更改为字段(例如val name: String).

但是,我不知道如何最好地更新相应的PsiReference实例.Kotlin调用者需要更改myObj.name()myObj.name不带括号.

目前,我正在做以下事情:

ReferencesSearch.search(function).findAll().forEach {
    val nextSibling = it.element.nextSibling
    if ((nextSibling as? KtValueArgumentList)?.arguments?.isEmpty() == true) {
        nextSibling.delete()
    }
}
Run Code Online (Sandbox Code Playgroud)

以上工作有点.也就是说,转换正确发生.但是,IDE仍然认为它正在调用一个函数.它myObj.name使用以下消息强调转换中的错误:

类型的表达式"名称" String不能作为函数调用.找不到函数'invoke()'

name在编辑器中手动重写强制intellij刷新引用并且错误消失.

我应该怎么做以防止这种情况发生?

intellij-plugin kotlin

6
推荐指数
1
解决办法
128
查看次数

如何捕获SecurityException以获取位置权限

我在某些设备API 6.0+上遇到以下崩溃:

Fatal Exception: java.lang.SecurityException: Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to perform any location operations.
       at android.os.Parcel.readException(Parcel.java:1693)
       at android.os.Parcel.readException(Parcel.java:1646)
       at com.google.android.gms.internal.zzed.zza(Unknown Source)
       at com.google.android.gms.internal.zzcda.zzdw(Unknown Source)
       at com.google.android.gms.internal.zzcdd.zzvQ(Unknown Source)
       at com.google.android.gms.internal.zzcdj.zzvQ(Unknown Source)
       at com.google.android.gms.location.zzf.zza(Unknown Source)
       at com.google.android.gms.internal.zzbaq.zza(Unknown Source)
       at com.google.android.gms.internal.zzbdd.zzb(Unknown Source)
       at com.google.android.gms.internal.zzbdd.zzqq(Unknown Source)
       at com.google.android.gms.internal.zzbdd.onConnected(Unknown Source)
       at com.google.android.gms.common.internal.zzaa.onConnected(Unknown Source)
       at com.google.android.gms.common.internal.zzn.zzj(Unknown Source)
       at com.google.android.gms.common.internal.zze.zzrj(Unknown Source)
       at com.google.android.gms.common.internal.zzi.zzrk(Unknown Source)
       at com.google.android.gms.common.internal.zzh.handleMessage(Unknown Source)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.os.HandlerThread.run(HandlerThread.java:61)
Run Code Online (Sandbox Code Playgroud)

请注意,在进行任何与位置相关的操作之前,我要求用户获得位置许可.但由于某种原因我无法重现,有些设备似乎在我使用时报告了位置权限:

boolean hasPermission = ActivityCompat.checkSelfPermission(context, permission) == …
Run Code Online (Sandbox Code Playgroud)

android android-location google-play-services

5
推荐指数
1
解决办法
876
查看次数

如何在Android项目上设置自定义Java编译器参数?

我将以下内容放在项目gradle文件的末尾:

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs += 
            ['-Xep:MissingOverride:ERROR', 
             '-Xep:MissingCasesInEnumSwitch:ERROR',]
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的代码中,如果我在@Override某处删除了注释或删除了switch语句,我的Android项目仍会生成。它不应该因错误而失败吗?

java android javac gradle android-gradle-plugin

0
推荐指数
1
解决办法
1562
查看次数