问题标签 [android-jack-and-jill]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
576 浏览

android - 使用 Spock 和 Java 8 运行 Android 应用程序的问题

这是我的设置。我有一个带有几个 Java(不是 Android)模块的 Android 项目。

最近我开始使用 Spock(这是一个基于 JUnit 和 Groovy 的测试框架)。

在 Java 模块上,我只需使用 groovy 插件,如下所示:

然后包括这些依赖项:

在我的主要 Android 应用程序上,我进行了此设置。在根项目上,我有这个类路径依赖项:

在应用程序模块上我应用它:

并像这样配置:

我还通过在 Android 上使用 Jack 标志启用了 Java 8:

所有的测试都可以在 Spock 上完美运行(甚至是应用程序模块上的测试)。但是,当我尝试在设备或模拟器上运行该应用程序时,我会从 Android Studio 收到多个错误。错误发生在任务中:compileDebugGroovyWithJack它抱怨无法从外部依赖项(包括支持库)中找到任何类:

在此处输入图像描述

有没有人遇到过这个问题?这是一个相当大的障碍:(

0 投票
1 回答
890 浏览

android - 使用 Jack API v01 编译失败 - ConfigurationException:解析 proguard-android.txt 时出错

我正在尝试使用新的 Jack Compiler 编译我的 Android 应用程序。使用默认的 proguard android 规则进行缩小失败。

我得到的信息是

Gradle 控制台输出

proguard-android.txt

这是一个标准的安卓 SDK 文件。我没有修改它。它不喜欢的那行在下面的摘录中。

Gradle.config

什么有效

如果我只是从 proguardFiles 列表中排除proguard-android.txt ,那么构建当然会起作用,但我不知道我是否应该这样做;这是否遗漏了可能会破坏我的应用程序的一部分的重要内容?还是所有这些设置都内置在 Jack 的新缩小器中?

编辑

我尝试排除proguard-android.txt并进行了测试。我的应用程序崩溃了,因为 Guava 的某些部分被缩小/混淆了。

0 投票
2 回答
4924 浏览

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

谷歌已经为 Android Studio 2.1 的 Android 开发者发布了他们新的JACK 编译器的测试版本。

我的问题是,我们如何使用 JACK 为 APK 启用混淆功能?下面的文章说 JACK 在本地执行混淆并消除了对 Proguard 的需要:

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

它还说

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

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

总之:

  • 我们究竟如何使用 JACK 启用混淆功能?我们是否可以绕过 Proguard 的使用,或者即使我们使用 JACK 编译,Proguard 是否在混淆过程中起到了事实上的作用?

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

笔记:

我已经提到了以下帖子:

进一步参考:

更新:

Matt Insko回答很有帮助,但我想要更详细、更准确、更规范的答案。

0 投票
4 回答
14354 浏览

android - 使用 Jack 编译器时出错 - app/build/intermediates/packaged/debug/classes.zip' 是无效库

我在使用 Jack 编译器时遇到了这些错误,但我不明白是什么问题:

我正在使用具有以下依赖项的 Android Studio 2.2 Preview 2:

我也在使用 Gradle 插件 2.2.0 alpha 2 和 com.google.gms:google-services:3.0.0

非常感谢任何帮助。

0 投票
1 回答
395 浏览

android - 杰克似乎并没有自己混淆代码

我正在使用 Android Studio 版本v2.1.2Proguard当我尝试对发布版本进行签名时不起作用,构建失败了。

根据开发人员文档中的此链接,杰克会自动进行混淆。

处理收缩、混淆、重新打包和 multidex 不再需要使用单独的包,如 ProGuard。

我不得不禁用minifyEnabled标志并删除我们加载 proguard 文件的行;在这样做之后让它工作;我检查了apk通过上述操作生成的文件,我无法判断 Jack 是否真的混淆并减少了冗余代码,因为发布apk大小与调试apk大小相同。

我需要了解如何使用较新的编译器进行混淆,因为文档并没有真正帮助。

我期待了解以下问题。

没有文件Jack可以工作吗?Proguard

有没有办法指定Proguard文件?

0 投票
1 回答
569 浏览

android - Android Jack 编译器没有从 proguard 规则中删除日志

我试过使用:

在 Proguard 中删除日志,如果我不使用新的 Jack 编译器,它会很好用

当我编译 apk 时,我注意到所有日志在生产版本中都处于活动状态。是否存在错误、错误或“-assumenosideeffects”尚不支持?

我可以从最终 apk 的日志中删除字符串吗?

0 投票
1 回答
912 浏览

android - Jack 在 Preview 4 上失败,出现 com/android/jack/api/v03/Api03Config 错误

我在使用最新的 Android Studio(预览版 4)和使用 Jack 编译时遇到问题。

我收到此错误:

有任何想法吗 ?

我的毕业文件: http ://pastie.org/private/ieb3wbkxhr1zbk0xr5dssw

来自 Gradle 的堆栈跟踪:http: //pastie.org/private/agjsdikwk23zmaz2qz6xw

计算机正在运行最新的 WIN10,并且此错误与我的防病毒软件无关,因为它可以在这里提到:https ://code.google.com/p/android/issues/detail?id=211732 (我不'反正没有 :) )

在 Android Bug Tracker 中作为错误发布:

https://code.google.com/p/android/issues/detail?id=214156

请star :)

0 投票
2 回答
834 浏览

android - 使用 JACK 时生成的 proguard mappings.txt 文件在哪里?

我一直在尝试将最新的JACK 和 JILL 构建系统用于我的 android 项目。我知道 JACK 进程包括 proguard 处理。

但在那之后,我找不到用于回溯Google Play 开发人员控制台上提供的错误堆栈跟踪的mappings.txt文件。

请帮我找到 mappings.txt

另一个相关的问题是在JACK时shrinkingResources是否仍然有效,因为shrinkingResources需要minifyEnabled trueJACK需要minifyEnabled false

项目配置——

更新 -

T. Neidhart 发布的答案不是一个有效的解决方案。

0 投票
3 回答
5051 浏览

android - 错误:数据绑定尚不支持 Jack 构建

我正在实施DataBinding,它运行良好,但不允许我使用jackOptions. Data Binding does not support Jack builds yet它在构建时抛出错误。

这是我的build.gradle

0 投票
0 回答
279 浏览

android - 当 minSdkVersion 设置为 24 时,Jack 翻译的 lambda 表达式没有使用更有效的方法

我目前正在查看jack编译器为 lambda 表达式生成的字节码。

让我们以下面的普通 Java 类为例:

使用 JDK 1.8 时javac,它会生成以下字节码:

根据文档,将 lambda 表达式转换为字节码是通过invokedynamic call site在第 16 行生成并将 lambda 表达式的主体转换为静态方法来执行的。

现在,让我们谈谈jack. 通常,当编译 lambdaminSdkVersion小于 24 时,jack编译器会生成一个匿名类 - 以向后兼容基于 1.6/1.7 的先前运行时。

但是当编译minSdkVersion设置为 24 的 lambda 时会发生什么?
为了回答这个问题,我创建了相同的 lambda 表达式(如上面的 Java 示例)并jack在 Android 环境中编译它:

在这种情况下,我希望jack生成更多性能/优化的代码(类似于 JVM 的invokedynamic call site创建和 lambda 主体辅助方法生成),因为 Android 7.0 的运行时基于 1.8。
我知道invokedynamicDalvik 和 ART 都不支持指令操作数,但认为会有更优化的机制 - 否则 Android 中的 lambda 表达式支持只是语法糖..

相反,生成的字节码包含相同的匿名类:

为什么jack编译器使用匿名类方法在字节码中表示 lambda 表达式,而不是更高效的方法,可能类似于 JVM 的invokedynamic特性?