Articles of java 8

Android N Java8 java.time

我更新到最新的Android N sdk。 我唯一不理解的是为什么我不能将java.time导入到我的代码中? 我认为Java8可以通过Android N获得。那么为什么Google没有添加java.time包呢?

使用jack时,Lambdaexpression式在Android中的IncompatibleClassChangeError崩溃

我在我的Android项目中使用Java 8。 我已经设置了Jack(在Android应用程序模块中)和Retrolambda(在其他模块中)。 我遇到的问题是,当我尝试使用类variables(并且我可以在任何模块中重现它)时,我的Lambdaexpression式在一个特定场景中崩溃,在所有其他情况下,它按预期工作。 也许这是标准的Java行为,但到目前为止我找不到任何解释。 有谁知道问题在哪里? 我的class级和崩溃如下: public class LambdaBugTest { private final String parentClassVariableString = “parentClassVariableString”; public void testLambdas() { // ———– THESE WORK OK ————– final Functional simpleLambdaWorks = text -> System.out.print(text); final Functional methodReferenceWorks = System.out::print; final Functional interfaceWithClassParamWorks = new Functional() { @Override public void doSomething(String text) { System.out.print(text + ” […]

没有–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 […]