相关疑难解决方法(0)

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
查看次数

如何使用JACK编译器执行缩小和混淆?

谷歌已经为Android开发者发布了针对Android Studio 2.1 的新JACK编译器测试版.

我的问题是,我们如何使用JACK为APK进行模糊处理?下面的文章说JACK 本地执行模糊处理并且不需要Proguard:

以下文章说JACK使用Proguard配置文件(即.pro文件)来执行混淆:

它也说

在此过程中,Jack还处理任何请求的代码缩小(缩小和/或混淆).

这到底是什么意思?我们是否必须使用该minifyEnabled选项并定义.pro包含Proguard选项的文件?

综上所述:

  • 我们究竟如何与JACK实现混淆?我们是否可以绕过Proguard的使用,或者Proguard在混淆过程中扮演事实上的角色,即使我们使用JACK编译?

  • JACK目前是否支持混淆,是否可以在Android Studio的稳定(即非beta/canary)版本中使用?

注意:

我已经提到了以下帖子:

进一步参考:

更新:

答案马特Insko是有益的,但我想更详细,更准确,规范的答案.

android android-sdk-tools android-studio android-jack-and-jill android-proguard

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