小编Mar*_*ell的帖子

Jack(Java Android编译器工具包)将如何影响Scala开发人员

现在宣布杰克谷歌澄清了Java与Android相关的可预见的未来.但是对Scala和其他基于JVM的语言开发人员有什么影响.特别是:

  1. 由于自己的编译器产生Java字节码,Scala确实很神奇.但Jack工具链不处理字节码.生成的字节码会获得Jack处理的任何优化优势吗?
  2. 从Scala 12开始,仅支持Java 8+.那就是生成的字节码也是Java 8+.杰克可以使用Java 8字节码(没有或有限制)?
  3. 可以使用新支持的Java 8功能来开发较旧的Android版本(minSdkVersion <'N'),还是应该为每个Java版本维护单独的分支?(文件中不清楚).

所有这些问题归结为一个问题:未来可以将Scala用于Android开发而不会牺牲新Scala功能和新Android工具链的优势吗?

相关阅读:

请在评论或答案中分享相关链接

相关问题:

有关:

请投票给Jack工具功能请求:


编辑:

我试图推理(不回答)我的问题,希望如果我错了,专家会纠正我.

下面是一个假设的Jack构建流程,其中包含一些额外的块,这些块是根据我的逻辑和我从可用文档中学到的内容添加的.

基本假设是Dalvik支持Java 7字节码指令.如果这是正确的Java 8指令不能直接传递给Dalvik,它们应该以某种方式转换为Java 7.(可能类似于Scala编译器总是这样做).

问题是转型发生在哪里?似乎Jill现在不能处理Java 8字节码,因此可能发生在假设流程的块(3)中.如果这是正确的,那么只有Java源项目文件需要进行转换,并且对第二个问题的回答是 - 否则,在Jill能够执行之前,不能使用库中的Java 8类(如果可能的话) .那就是我们不能使用Scala 12+.

如果在块(6)中执行所有代码优化而不是对第一个问题的答案是 - 是.转换为库.jar的Scala代码可以从Jack优化中受益.但初步应将其转换为.jayce(类似AST的表示),这将增加构建时间.

最后,Jack生成.dex Dalvik字节码,以保持与较旧的Dalvik运行时兼容(ART也使用Dalvik字节码).因此,三维问题的答案是:是的,可以使用Java 8功能.但仅限于项目Java源代码.App仍与任何运行时兼容.但是由于转换为Java 7(Dalvik字节码),Java 8的优势被删除.


在此输入图像描述

android scala java-8

36
推荐指数
1
解决办法
1662
查看次数

Android + Scala + Intellij 13

Android是很棒的平台.Scala是很棒的语言.Intellij Idea是一款出色的IDE.

他们如何一起工作?

注意:这是一个自我回答.但如果您有更多信息,请在此处分享.

android scala intellij-idea

18
推荐指数
2
解决办法
4598
查看次数

如何使用Kotlin Dokka记录主构造函数参数

假设有一个类主要构造函数具有param我想要在类的doc块中解析(链接到实际参数)的参数.

/** Class A does something using [param]. 
@constructor constructs A with [param].
*/
class A (param: Int)
Run Code Online (Sandbox Code Playgroud)

但是,paramIDE会突出显示题词,表示无法解析符号param.

kotlin kotlin-dokka

7
推荐指数
1
解决办法
983
查看次数

Kotlin类的平等失败了

以下代码段显示了测试KClass从不同来源获得的Kotlin 引用的相等性的结果.他们的字符串表示是相同的.但他们的java类是不同的.期待c,c0并且c1是平等的.但由于某种原因,他们不是.

有一些细微差别或它是一个错误?如果它不是一个错误,那么测试KClasses 相等性的可靠方法是什么?

fun main(args: Array<String>) {
    val c = Int::class
    fun test(v0: Any, v1: Any) {
        val c0 = v0.javaClass.kotlin
        val c1 = v1.javaClass.kotlin
        println("c= $c;  c0= $c0;  c1= $c1") // c= class kotlin.Int;  c0= class kotlin.Int;  c1= class kotlin.Int
        println("c= ${c.java};  c0= ${c0.java};  c1= ${c1.java}") // c= int;  c0= class java.lang.Integer;  c1= class java.lang.Integer
        println("c = c0? ${c == c0};  c0 = c1? ${c1 == c0}") // …
Run Code Online (Sandbox Code Playgroud)

reflection kotlin

6
推荐指数
1
解决办法
530
查看次数

按ID查询Firebase Firestore文档

当我从"Cloud Firestore数据模型"指南中获得"每个文档都由一个名称标识".是否可以通过该文档标识符(名称或ID)查询集合?

例如,集合"Things"中的文档具有ID:0,1,2等:

在此输入图像描述

是否可以查询ID小于100的文档?

firebase google-cloud-firestore

6
推荐指数
2
解决办法
9511
查看次数