相关疑难解决方法(0)

如何告诉Gradle使用特定的JDK版本?

我无法弄清楚这是否有效.

场景:

  • 我有一个用gradle构建的应用程序
  • 该应用程序使用JavaFX

我想要的是

  • 使用一个变量(每个开发人员机器定义)指向JDK的安装,JDK将用于构建整个应用程序/ tests/...

我想过拥有gradle.properties文件,定义变量.就像是

JAVA_HOME_FOR_MY_PROJECT=<path to my desired JDK>
Run Code Online (Sandbox Code Playgroud)

我不想要的

  • 指向JAVA_HOME所需的JDK

我可以接受很多建议:

  • 定义系统环境变量的解决方案,我可以在build.gradle脚本中查看
  • gradle.properties中定义的变量
  • 仅为构建上下文重写JAVA_HOME变量(类似于use JAVA_HOME=<my special JDK path defined somewhere else defined>)
  • 我没有想到的其他事情

题:

  • 如何将变量(如何定义,作为gradle.properties系统环境变量中的变量,......)连接到构建过程?

我有多个JDK7可用,需要指向一个特殊版本(最低JDK_u版本).

任何答案都表示赞赏,我感谢每一个提示正确的方向.

java gradle build.gradle

242
推荐指数
14
解决办法
25万
查看次数

Android .idea/misc.xml的languageLevel标记不断更改JDK

由于我不知道的原因,languageLevel键从JDK_1_8更改为JDK_1_7.

会发生什么事?

这是否与其他从事该项目的开发人员的IDE有关?也许他们有另一个Android Studio设置?

这是在我注意到源代码管理下的文件发生了变化后弹出的内容:

$ git diff
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fbb6828..5d19981 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -37,7 +37,7 @@
     <ConfirmationsSetting value="0" id="Add" />
     <ConfirmationsSetting value="0" id="Remove" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
Run Code Online (Sandbox Code Playgroud)

如果重要的话,这是我的gitignore.

.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
Run Code Online (Sandbox Code Playgroud)

我该如何进行以便它只是保持这种或那种方式?

java android android-studio

175
推荐指数
4
解决办法
2万
查看次数

Gradle,"sourceCompatibility"与"targetCompatibility"?

sourceCompatibility和之间有什么关系/区别targetCompatibility?当它们被设置为不同的值时会发生什么?

根据Gradle文档:

sourceCompatibility是"编译Java源时使用的Java版本兼容性". targetCompatibility是"为Java生成类的Java版本."

我的理解是,targetCompatibility将生成与特定版本的Java兼容的java字节码,这是一个功能的子集sourceCompatibility吗?

java gradle

116
推荐指数
3
解决办法
7万
查看次数

Android的Java版本如何与Java SE版本相关?

我一直想知道用于Android开发的Java版本如何与Java SE版本相关.例如,我今天正在阅读有关"类型推断和通用方法"的内容,这是Java SE 7中添加的一项功能.我不知道自己,"我可以在Android代码中使用它吗?"

当然,我可以将代码输入到Android项目中并查看它是否可以编译,但我会更高兴在我脑海中进行某种映射.

我已经尝试谷歌搜索此信息,检查Android文档等,但无法找到答案.

编辑:我对语言功能更感兴趣,例如Android Java语法版本如何与Java SE语法相关.

java android version

71
推荐指数
1
解决办法
3万
查看次数

Android是否支持JDK 6或7

我是Android开发的新手.我可以使用在Android中使用JDK 7开发的现有Java代码吗?

这些函数使用xerces dom和xslt以及xpathapi.目前,当我安装Android Eclipse ADT环境时,这些功能都没有编译.我还想知道Android设备本身是否支持JRE 6或7?

android jdk6 java-7

56
推荐指数
2
解决办法
5万
查看次数

Android数据绑定(类似于WPF)?

我在发布之前已经搜索了一些类似的问题 - 但是我在Android和数据绑定方面有一个普遍的问题(我检查的其他答案并没有让我更进一步......).假设你有一个类车辆:

public class Vehicle {

private Owner owner;
private String brand;

//getter and setter for above attributes...

}
Run Code Online (Sandbox Code Playgroud)

这是所有者类....

public class Owner {

private String name;

}
Run Code Online (Sandbox Code Playgroud)

现在 - 我最近正在研究微软WPF采用的MVVM(ModelView-ViewModel)模式.这让我想知道:假设我想绑定我的所有者对象的name属性,这是Vehicle对象的子对象 - 在Android中是否会有一些标准方法来实现这一点?还假设,在我可以更新模型之前,我可能必须验证输入?

我想象以下组件(假设MVVM):

  • 视图(活动)不包含应用程序逻辑 - 因此它或多或少是空的
  • ViewModel将处理Vehicle对象的实例并对其执行操作
  • 模型本身看起来像我之前发布的代码 - 完全忘记了View和ViewModel

现在,当我将EditTexts,TextViews等添加到视图中时,我希望它们绑定到我的上下文对象的某些属性(在这种情况下为Vehicle)......如果我的问题不明确或者您需要进一步的信息,请执行此操作让我知道:)提前谢谢.

Ps我认为熟悉WPF的人现在可能是我的意思吗?我自己刚刚阅读了WPF并发现它是处理内容的好方法.

PPs我知道android绑定项目,但我想知道Android中是否存在某种内置方法,或者某些约定有人关注:)这真的更像是一个绑定理论问题我猜...

data-binding wpf android

33
推荐指数
7
解决办法
2万
查看次数

Android Studio:包含Google地图时的编译器设置

我在Android Studio中创建了一个新项目,并添加了Google地图活动.

我收到这些警告:

warning: com/google/android/gms/maps/GoogleMap.class(com/google/android/gms/maps:GoogleMap.class): major version 51 is newer than 50, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.
warning: com/google/android/gms/maps/SupportMapFragment.class(com/google/android/gms/maps:SupportMapFragment.class): major version 51 is newer than 50, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.
warning: com/google/android/gms/maps/model/LatLng.class(com/google/android/gms/maps/model:LatLng.class): major version 51 is newer than 50, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.
warning: com/google/android/gms/maps/model/MarkerOptions.class(com/google/android/gms/maps/model:MarkerOptions.class): …
Run Code Online (Sandbox Code Playgroud)

java android java-7 android-studio

14
推荐指数
2
解决办法
2万
查看次数

钻石运营商不受支持

我正在尝试使用菱形运算符,但我收到以下消息:

-source 1.5不支持菱形运算符(使用-source 7或更高版本启用菱形运算符)

是否可以修复与android的netbeans?

java android netbeans

8
推荐指数
2
解决办法
1万
查看次数

androidstudio设置java版本1.7

我正在尝试使用java版1.7与android studio,但遗憾的是它无法正常工作...如果将版本设置File->Other settings -> Default project structure

  Project SDK:
  java version 1.7.0_06

  Project language level:
  7.0 Diamonds, ARM, multi-catch
Run Code Online (Sandbox Code Playgroud)

但是当我使用带有字符串的switch语句时,我得到一个错误,这在java 1.7中应该是可能的,所以我需要设置任何其他设置吗?

java version android-studio

8
推荐指数
2
解决办法
8403
查看次数

我怎样才能抑制匿名新的runnable()可以替换为lambda

我得到了"匿名新的runnable()可以替换为lambda"警告与以下代码.

final ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
sv.post(new Runnable() {

    @Override
    public void run() {
        sv.fullScroll(ScrollView.FOCUS_DOWN);
    }
});
Run Code Online (Sandbox Code Playgroud)

我非常努力地在Google上搜索,似乎是使用lambda表达式重写...

final ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
Runnable test = () -> sv.fullScroll(ScrollView.FOCUS_DOWN);
test.run();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行应用程序时,Android Studio会因错误而停止,如下所示:

Error:(78, 40) error: lambda expressions are not supported in -source 1.7
(use -source 8 or higher to enable lambda expressions)
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么Android Studio让我使用lambda表达式,即使它无法编译.这是一个错误吗?

此外,我尝试使用gradle-retrolambda,但它很难用于biginner.

由于我无法编译我的代码,我不确定上述lambda expresssion是否正确.

在我看来,IDE不应该抱怨代码无法编译.所以我认为应该抑制使用lambda表达式的警告.但我不知道怎么会......

任何帮助表示赞赏.

java lambda android java-8

8
推荐指数
2
解决办法
5140
查看次数

Android切换到gradle不编译JRE7代码功能

我将我的Android应用程序移到了Android Studio而没有切换到Gradle.现在我想搬到Gradle.该应用程序在切换到Gradle之前在Android Studio中编译,但现在我已经设置了Gradle,它将不会编译String Switch语句或菱形运算符.我得到的错误是

Gradle: error: strings in switch are not supported in -source 1.6
(use -source 7 or higher to enable strings in switch)
Run Code Online (Sandbox Code Playgroud)

我通过打印确保我在JRE 7上运行

System.getProperty("java.version")
Run Code Online (Sandbox Code Playgroud)

在一项任务中.输出是

1.7.0_25
Run Code Online (Sandbox Code Playgroud)

让我最困惑的是"-source 1.6"和"use -source 7"之间的差异.但是我知道这两个都是Java sdk的名字所以也许标题只是混淆了.

我需要设置Gradle设置吗?或者这在Gradle中是不可能的?如果不是,那么为什么没有Gradle就可以解决这个问题.

应该注意的是,我的项目的无Gradle版本运行默认的Android Studio版本.我没有写一个ant脚本或maven脚本来构建它.其中一个可能是它的构建方式,但我没有任何项目特定的文件.只是Android Studio .iml文件.

更新 我尝试将以下内容添加到build.gradle android {}部分

compileOptions {
   sourceCompatibility = org.gradle.api.JavaVersion.VERSION_1_7
   targetCompatibility = org.gradle.api.JavaVersion.VERSION_1_7
}
Run Code Online (Sandbox Code Playgroud)

但.class文件无法构建,它不包含在apk中.请参阅此文章中的 "使用Java 1.6编译的Android项目需要库"部分

android gradle android-studio

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

错误:(24,46)错误:-source 1.6不支持菱形运算符(使用-source 7或更高版本启用菱形运算符)

我的错误在我身上 ArrayAdapter<>

listView.setAdapter(new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,name1));
Run Code Online (Sandbox Code Playgroud)

错误:(24,46)错误:-source 1.6不支持菱形运算符(使用-source 7或更高版本启用菱形运算符)

然后我将我的java版本更新为

java version "1.7.0_67" 
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误.操作系统我正在使用ubuntu 14.04.

java android ubuntu-14.04

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