Articles of java 8

没有–min-sdk-version> = 24时使用的默认或静态接口方法

为什么我们在Android Studio 3.0 RC1中出现此错误? com.android.dx.cf.code.SimException: default or static interface method used without –min-sdk-version >= 24 根据android文档 ,“默认和静态接口方法”function与Any min-sdk版本兼容。 我将其跟踪到一个调用Comparator.naturalOrder()的java库 – 它已在API级别24中添加。 因此,我不希望在java库中对此代码有任何错误消息。 当我在我自己的android-app或lib java代码中使用代码时,我看到正确的lint消息:“Call需要API级别24” 错误消息是错误的还是我错过了什么?

每次更新到1.8路径时,Android Studio JDK位置都会更改回1.7

我最近安装了jdk 1.8 u92,之后Android Studio表示api24版本需要它。 但是,我现在遇到了这个问题。 我查看了其他一些解决方案并卸载了jdk 1.7,为JDK_HOME,JAVA_HOME和JAVA8_HOME添加了环境variables。 问题仍然存在。 每次我尝试构建应用程序时,gradle sync都会失败,Android studio会要求我选择一个有效的JDK目录 。 然后我转到Project Structure => JDK Location并将其更新到1.8文件夹。 尝试再次构建会产生相同的错误,当我检查项目结构时,路径将自动设置回旧的JDK 1.7。 这个问题有什么问题吗?

以某种方式使用错误的JDK(?)构建Android应用程序

我最近更新了Android Studio 3的Android项目。我想支持Java 8语言function,因此在build.gradle中添加了以下内容: compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 然后我在Android 8.0.0设备上运行我的应用程序。 在运行时我看到了 java.lang.NoSuchMethodError: No virtual method keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; in class Ljava/util/concurrent/ConcurrentHashMap; or its super classes (declaration of ‘java.util.concurrent.ConcurrentHashMap’ appears in /system/framework/core-oj.jar) 我收集这是因为keySet()的签名在Java 8中从返回Set更改为返回KeySetView 。 导致exception的行如下所示: for (Long id : mSomeMap.keySet()) KeySetView实现了Set ,它肯定是Iterable ,所以无论这行是被解释为Java 7还是Java 8,我都认为它会以任何方式工作。 我对Java基础知识的理解是粗略的 – 这里发生了什么? 更新 到目前为止,我的不明白是: 虽然Android现在支持一些Java 8语言function,但它的API与Jav​​a 8不同。特别是,Android的ConcurrentHashMap.keySet()返回一个Set ,而ConcurrentHashMap.keySet()的Java […]

无法在android studio中解决符号’java.time.LocalDate’错误

我试图在我的Android应用程序中使用java.time.LocalDate,但是如果我尝试导入它,那么java.time中的任何类都会在Android Studio 1.1中无法解析符号错误 我能解决这个问题的唯一原因是它不支持java 8.这是真的吗?

使用java 8在Android Studio 2.1中获取错误

目前我使用的是最新的android studio 2.1 java 8 这是我的build.gradle文件 android { compileSdkVersion 22 buildToolsVersion “24rc3” defaultConfig { applicationId “com.name” minSdkVersion 10 targetSdkVersion 19 jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } ……. } 我得到以下编译时错误,我不知道 错误:com.android.jack.frontend.FrontendCompilationException:无法在com.android.jack.Jack.run(Jack.java:472)的com.android.jack.Jack.buildSession(Jack.java:892)编译com.android.jack.api.v01.impl.Api01ConfigImpl $ Api01CompilationTaskImpl.run(Api01ConfigImpl.java:102)… 8更多警告:处理任务java.io.IOException时出现exception:com.android.jack.api.v01 .CompilationException:编译失败:oTT:compileDebugJavaWithJack FAILED错误:任务执行失败’:oTT:compileDebugJavaWithJack’。 java.io.IOException:com.android.jack.api.v01.CompilationException:编译失败信息:BUILD FAILED 请您询问是否需要一些细节。

android studio error:默认接口方法仅支持从Android N开始(–min-api 24)

我升级到Android工作室3.1,我得到以下错误: Default interface methods are only supported starting with Android N (–min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner) Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (–min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner), sources=[Unknown source file], tool name=Optional.of(D8)} 这是我的gradle配置: compileSdkVersion 27 //buildToolsVersion ‘27.0.3’ defaultConfig { minSdkVersion 16 targetSdkVersion 27 multiDexEnabled true //… } 正如你所看到的那样,我的目标27已经领先于其抱怨的24? 我该怎么做才能解决这个问题? 如果我改为1.8 java不会让我失去很多顾客? 为什么我在升级android […]

在android studio中使用Java 8

即时通讯使用Android工作室,我想使用lambdaexpression式,只能从Java 8,当我尝试使用它,我得到: Lambda expression are not supported at this language level. 那么,我该如何改变AndroidStudio?

带有Java 8模块的Gradle Android项目

正如我在这篇文章中看到的 , Java 8现在还没有被Android正式支持。 所以我很感兴趣,如果有可能与Java 7和Java模块(作为依赖项)build立Android模块。 作为一个例子,我试图创build一个Gradle项目,它将包含一个Android模块和一个Java模块作为依赖项。 通过为这两个模块设置下面的compileOptions ,一切正常。 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } 但是,如果我尝试改变我的Java模块的compileOptions compileJava { sourceCompatibility = 1.8 targetCompatibility = 1.8 } 我得到以下错误: Error:Execution failed for task ':fc-android:preDexFreeDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 1 所以问题是,实际上可能有用1.7版编译的Android模块以及用1.8编译的依赖Java模块吗? 如果不是,那为什么? 更新: Retrolamba for Gradle (由@Saeed提到)很好,但是他们只支持lambdas,所以不能访问Stream API , DateTime […]

匕首2,Gradle插件和杰克 – 指导要求

我正在用Android Studio(AS 2.1.2 – SDK 24)使用Dagger 2(DI库的首次用户),显然我的第一个想法是“我需要什么依赖来使用它? 看过例子,我可以看到你需要在顶层的build.gradle文件中,你需要一个注释处理器插件: classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 现在Module级别的build.gradle的依赖关系应用了Module的apt插件,所以我最终得到了如下的结果: apply plugin: 'com.neenbedankt.android-apt' // other generic settings – android / buildTypes etc. dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) . . compile 'com.google.dagger:dagger:2.6' apt 'com.google.dagger:dagger-compiler:2.6' provided 'javax.annotation:jsr250-api:1.0' } 问题 我一直在使用我的项目中的杰克工具链和Java 8,并发现上述configuration与杰克不兼容。 为了让杰克和匕首2合作,我研究了我需要的东西,我改变了以下内容: gradle-wrapper.properties: 变成 : distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip build.gradle (顶层) 变成: classpath 'com.google.guava:guava:19.0' // added after […]

Android编译时间与插口是非常缓慢的

我最近升级到Java 8,我的电脑随后使用插孔来编译我的Android版本。 自从我切换后,在我的设备上构build应用程序需要花费大量的时间。 通常在3-5分钟之间。 我更改了我的.jack文件中的服务器超时值为1800秒,它似乎仍然是服务器超时设置为60秒。 有没有人有类似的问题? 这是我的.jack文件的样子: SERVER_TIMEOUT=1800 编辑:我最近升级我的电脑从2010年年中的Mac台式电脑到2015年年底的模式。 虽然杰克还没有尽快编译,但是它已经有了很大的改进。 以前每次编译需要5分钟左右的时间,现在编译只需要一点点时间。 所以对于那些面临类似问题的人来说,这可能会给你一些额外的洞察力来解决你的问题。