我想为我的项目添加Java8支持。我找到的唯一合适的解决方案是retrolambda gradle插件项目。这是我的身材。项目和模块的gradle文件。
注意:请不要建议迁移到Android Studio 3,因为我想了解它为什么不工作。
项目build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'me.tatarka:gradle-retrolambda:3.7.0'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
模块构建。格拉德尔
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.test.test"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
retrolambda {
javaVersion JavaVersion.VERSION_1_7
defaultMethods true
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
这个应用程序本身非常简单。它只有一个默认活动,带有Java8代码,如下所示:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<String> strings = new ArrayList<>();
strings.add("Hello");
strings.add("World");
strings.stream().forEach(System.out::println);
}
}
启动应用程序时,我发现以下错误:
致命异常:主进程:com。斯莱什。mtbbank,PID:25338爪哇。lang.NoSuchMethodError:没有接口方法stream()Ljava/util/stream/stream;在Ljava/util/List类中;或者它的超类(声明'java.util.List'出现在/system/framework/core libart.jar中)在com上。斯莱什。mtbbank。主要活动。android上的onCreate(MainActivity.java:19)。应用程序。活动android上的performCreate(Activity.java:6303)。应用程序。仪器。android上的callActivityOnCreate(Instrumentation.java:1108)。应用程序。活动线程。在android上执行LaunchActivity(ActivityThread.java:2402)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:2509)。应用程序。活动线程。在Android上访问1000美元(ActivityThread.java:153)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1373)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:102)。操作系统。活套。android上的loop(Looper.java:154)。应用程序。活动线程。java上的main(ActivityThread.java:5529)。朗,反思一下。方法在com上调用(本机方法)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(zyteinit.java:739)。Android内部的操作系统。合子岩。main(ZygoteInit.java:629)
错过了什么?知道它为什么不起作用吗?
提前谢谢!
strings.stream().forEach(System.out::println)
Retro Lambda只做其名称所暗示的事情:它允许您使用Lambda。它不支持流。有一些库可以对流API进行后端口,但retrolambda没有。
问题内容: 突然在JUnit测试期间这种情况一直发生。一切正常,我编写了一些新测试,并且发生了此错误。如果我还原它,它不会消失。这是为什么? 问题答案: 您(直接或间接)编写的新测试使用 使用Log4j记录的类 。 需要配置Log4J才能使此日志正常运行。 将 log4j.properties (或log4j.xml)文件放在 测试类路径 的 根目录中 。 它应该具有一些基本配置,例如 默认情况下
我试图在postgresql中使用HikariCP,但我在任何地方都找不到postgresql的配置。 请给我指出任何示例postgresql与HikariCP或任何配置教程相同。 我试着像下面那样使用它,但它不起作用,然后我意识到它是为MySQL设计的
也许我做错了什么。 CORS策略阻止从来源“https://www.keycloak.org”访问“https://accounts.zoodexchange.com/auth/realms/development/protocol/openid-connect/token”处的XMLHttpRequest:请求的资源上没有“access-control-allow-orgin”标头。 您可以使用
问题内容: 这是MySQL的配置文件: 为SQL Server 2005指定什么?我这样做是这样的: 我的问题更确切地说是如何指定必须连接的数据库? 在MySQL中,我曾经这样做: 问题答案: 特定于数据库的 属性是: :JDBC驱动程序类 :JDBC URL :数据库用户 :数据库密码 :Hibernate的类名,它允许Hibernate生成针对特定关系数据库优化的SQL。 要更改数据库,您必须
问题内容: 这是MySQL的配置文件: 为SQL Server 2005指定什么?我这样做是这样的: 我的问题更确切地说是如何指定必须连接的数据库? 在MySQL中,我曾经这样做: 问题答案: 特定于数据库的 属性是: :JDBC驱动程序类 :JDBC URL :数据库用户 :数据库密码 :Hibernate的类名称,它允许Hibernate生成针对特定关系数据库优化的SQL。 要更改数据库,您必
我在Pycharm中使用mac OS Sierra 10.12.3和Pycharm社区版2016.3.2我在使用Python 2.7.11并尝试运行以下程序 导入pandas作为pd它给我错误,说没有名为pandas的模块 所以我去了终端,输入了pip 以下是回应 Brians MBP:~Brians$pip安装pandas要求已满足:pandas in./miniconda3/lib/pytho