Articles of java 8

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分钟左右的时间,现在编译只需要一点点时间。 所以对于那些面临类似问题的人来说,这可能会给你一些额外的洞察力来解决你的问题。

Maven:在应用程序中使用Java 8库,使用retrolambda-maven-plugin和DEX-ed使用android-maven-plugin

我写了一小部分小型图书馆供我内部使用。 这是使用Maven构build的。 这些库的目标是“常规”Java,GWT和Android。 其中一些是用Java 8编写的,因为我没有任何意图在GWT或Android上运行它们,因此其他库是用旧的Java 6编写的,以支持这两种。 我有一个计划,将我的库完全迁移到Java 8(根据语言特性),并且我还成功地在尚未发布的GWT 2.8.0上运行Java 8重新编写的库。 但是,我无法将Java 8重写的库编译为Android应用程序。 问题是Retrolambda(retrolambda retrolambda-maven-plugin插件)似乎只能处理当前的Maven模块类,并完全忽略依赖类。 因此, android-maven-plugin打破目标应用程序的构build: [INFO] UNEXPECTED TOP-LEVEL EXCEPTION: [INFO] com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) [INFO] at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472) [INFO] at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) [INFO] at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) [INFO] at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) [INFO] at com.android.dx.command.dexer.Main.processClass(Main.java:665) [INFO] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634) [INFO] at com.android.dx.command.dexer.Main.access$600(Main.java:78) [INFO] at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572) [INFO] […]

Android 8中是否提供Java 8 New Date API?

Android N会支持Java 8date/时间API吗? 正如这Android博客说: http : //android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html 改进的Java 8语言支持 – 我们很高兴将Java 8语言function带入Android。 使用Android的Jack编译器,现在可以在Android版本上使用许多stream行的Java 8语言function,包括lambdas等。 新function有助于减less样板代码。 例如,lambdas可以在提供事件监听器时replace匿名内部类。 某些Java 8语言function(如默认和静态方法,stream和function接口)现在也可在N及更高版本上使用。 与Jack一起,我们期待更紧密地跟踪Java语言,同时保持向后兼容性。 它说: 使用Android的Jack编译器,现在可以使用许多stream行的Java 8语言function,包括lambda等等 是的,支持lambdaexpression式。 那么Java 8的新date/时间API呢? 有任何想法吗? 谢谢!

Android Studio重构将恢复所有的lambda和其他Java 8function

我有一个Android库项目 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 它使用了很多lambda , 尝试资源等。 我怎么能把sourceCompatibility&targetCompatibility 降级到Java 1.6呢? 在Android Studio IDE中是否有这样的function?

在更新到Java 8之后,Android以错误的编码显示文本

我已经更新了我的项目到SDK版本24和Java 8,并遇到了一个奇怪的编码问题。 由于一些奇怪的原因,Android将我的硬编码的UTF-8string视为Windows-1251,因此文本出现乱码。 喜欢这个: 这是我改变了: compileSdkVersion 24 buildToolsVersion "24.0.2" compileOptions { encoding = 'utf-8' sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 而我所尝试的: 在Android Studio设置中更改了编码 增加了compileOptions.encoding ='windows-1251'和compileOptions.encoding ='utf-8' 添加系统variablesJAVA_TOOL_OPTIONS:-Dfile.encoding = UTF8 如果我恢复到Java 7一切正常。 有任何想法吗?

使用默认或静态接口方法,而不使用–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应用程序或lib java代码中使用代码时,我看到正确的lint消息:“调用需要API级别24)” 错误信息是错误的还是我错过了什么?