- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
现在发布 Jack谷歌阐明了 Java 与 Android 相关的可预见 future 。但是对 Scala 和其他基于 JVM 的语言开发人员有什么影响。特别是:
所有这些问题都归结为一个问题:Scala future 能否在不牺牲 Scala 新特性和新 Android 工具链优势的情况下用于 Android 开发?
相关阅读:
请在评论或答案中分享相关链接
相关问题:
相关:
请为 Jack 工具功能请求投票:
编辑:
我正在尝试推理(不回答)我的问题,希望如果我错了专家会纠正我。
下面是 Jack 构建的假设流程,其中包含一些额外的 block ,这些 block 是根据我的逻辑和我从可用文档中学到的知识添加的。
基本假设是 Dalvik 最多支持 Java 7 字节码指令。如果这是正确的,Java 8 指令不能直接传递给 Dalvik,它们应该以某种方式转换为 Java 7。(可能类似于 Scala 编译器总是做的事情)。
问题是这种转变发生在哪里?似乎 Jill 目前无法处理 Java 8 字节码,因此这可能发生在假设流程的 block (3) 中。如果这是正确的,那么只有 Java 源项目文件需要进行转换,并且第二个问题的答案是 - 不。在 Jill 能够做到之前,不能使用库中的 Java 8 类(如果可能的话)。那就是我们不能使用 Scala 12+。
如果在 block (6) 中执行所有代码优化,那么第一个问题的答案是 - 是。转换为库 .jar 的 Scala 代码可以从 Jack 优化中受益。但最初应该将其转换为 .jayce(类似 AST 的表示),这会增加构建时间。
最后,Jack 生成 .dex Dalvik 字节码以保持与旧版 Dalvik 运行时的兼容性(ART 也使用 Dalvik 字节码)。所以3-d question的答案是:是的,可以使用Java 8 的特性。但仅在项目 Java 源代码中。应用程序仍然与任何运行时兼容。但是由于转换为 Java 7(Dalvik 字节码),Java 8 的优势就消失了。
最佳答案
了解引入了2个工具很重要:
Jack:一个新的编译器来代替复杂的javac + proguard + dx
Jill:一个库链接器,能够链接当前编译的库(.class)等等。
见 http://tools.android.com/tech-docs/jackandjill
所以听起来这里有 2 个单独的问题:
Scala 兼容性:
Jack 不支持 Scala,因为 Jack 编译 Java 源代码。
然而 Scala 2.11 编译为 Java 1.6 字节码,因此 Jill 将能够选择该代码并转换为 jack 文件以提供给 Jack 编译器。
见 Android N Java 8 features (Jack compiler) and Kotlin interop (Kotlin 与 Scala 的问题相同,因为它是一种 JVM 语言)
Java 8,因此 Scala 2.12+,兼容性:
这部分正在开发中,如果 Jack/Jill 支持 Java 8,那么它也将支持 Scala 2.12+(通过 Jill)。否则,Java 8 开发人员与 Scala 2.12 开发人员处于同一条船上。
如果 Jack 支持 Java 8 但不支持 Jill,那么 Java 8 库开发人员将与 Scala 2.12 开发人员处于同一条船上。
见 https://www.guardsquare.com/blog/DroidconLondon2015
关于android - Jack(Java Android Compiler Kit)将如何影响 Scala 开发者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35958814/
所以我刚刚开始编写 iPhone 应用程序,一个潜在的雇主问我,“你的开发者句柄是什么?”他所说的“开发者句柄”到底是什么意思? 最佳答案 很可能您的应用程序在 iTunes 商店中列出的名称。这可以
我刚刚编译并运行了 hello world 应用程序,它运行良好。我通读了 android 文档中的一堆内容,内容涉及 android 的差异组件以及它们如何协同工作。现在我想制作一些链接到各种操作的
我不是 Android 开发人员,我试图了解他们在图形资源方面需要什么来制作可在许多 Android 设备上运行的应用程序。 我已经(尝试)阅读此页 http://developer.android.
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
如何编写程序来实现滑动 MUITableCell 的功能。我已经有一个我一直在使用的 MUITableCell 的子类。我是否只处理其中的滑动,就像处理 View 一样? 最佳答案 您需要实现此方法:
堆栈溢出, 是否有其他人在 Facebook 上遇到阻止注册为 Facebook 开发人员的能力的错误?该按钮对我显示为灰色。 当我尝试单击按钮将“否”切换为"is"时,没有任何功能。 我在互联网和
我正在尝试为 iOS Developer PageControl Sample 实现建议的优化。 .这是我在 PhoneContentController 中使用的代码: // A possible
您好,我写了一段代码来使用 Pubnub channel 发布 json: pubnubMessage = new Pubnub("demo", "demo"); Suppor
我正在熟悉 iOS 上的 SQLite。我正在尝试进行简单的用户注册,但是年龄值 (NSInteger) 总是变成一些大的负数,例如 -1073752692。这是我的注册码: - (User*
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improv
我的问题是,当我检查位置服务和数据是否关闭时,我的手机不会弹出没有启用数据或位置访问的通知,就像如果其中一个为假,它会显示通知。此功能在我的华为 P8 Lite 上不起作用,但在我的 Nexus 模拟
我正在开发一个需要集成 Paypal API 的 php 项目。我选择了 REST API。但我有一个企业账户(沙盒)。是否可以使用此帐户类型调用 REST API? 最佳答案 您需要使用任何有效的
我 6 个月前在 http://developer.paypal.com 上创建了一个应用程序.我已经创建了一些帐户以在沙盒模式下进行测试。昨天我检查了http://developer.paypal.
我很难理解 UIViewController 中的几个方法,但首先我会说出我认为它们的用途(忽略界面生成器,因为我没有使用它): -init:初始化在低内存情况下不需要释放的非 View 相关的东西(
我在构建我的应用程序时达到了 youtube api 配额限制,所以我向请求添加了一个开发人员 key ,现在我收到 403 错误:无效的开发人员 key 。 我曾多次尝试重新创建我的项目和 api
我搜索了http://espn.go.com/apis/devcenter/但找不到任何可以创建 API key 的地方。我还在 ESPN 创建了一个帐户,但没有运气。 最佳答案 4 个月前未公开 (
我阅读了处理此类问题的不同主题,但我仍然没有答案。这是我的问题: 在我的头文件中,我有这个: int cl, ch, _a = a, _b = b;\ __asm__ ("smull %0,
我实际上正在使用fbconnect,并且我正在尝试获取代表一个月前的unix时间。我对 1970 年以来的事情感到非常困惑。因为有人给我指出了正确的方向? 最佳答案 与 Unix epoch ,时间“
是否有任何工具可以让我监控内存使用和泄漏?例如,我想跟踪手动释放对象与启用 ARC 时自动释放对象时的内存使用情况。 最佳答案 它被称为 Instruments,您可以从 Product -> Pro
我正在使用 AllRoundAutomatation 的 Pl/sql 开发人员,现在我遇到了一个非常有趣的问题,我只想为 scoll up 配置 CTRL+UP 组合键!但我做不到,我该怎么做? 注
我是一名优秀的程序员,十分优秀!