问题标签 [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.
android - 使用 Spock 和 Java 8 运行 Android 应用程序的问题
这是我的设置。我有一个带有几个 Java(不是 Android)模块的 Android 项目。
最近我开始使用 Spock(这是一个基于 JUnit 和 Groovy 的测试框架)。
在 Java 模块上,我只需使用 groovy 插件,如下所示:
然后包括这些依赖项:
在我的主要 Android 应用程序上,我进行了此设置。在根项目上,我有这个类路径依赖项:
在应用程序模块上我应用它:
并像这样配置:
我还通过在 Android 上使用 Jack 标志启用了 Java 8:
所有的测试都可以在 Spock 上完美运行(甚至是应用程序模块上的测试)。但是,当我尝试在设备或模拟器上运行该应用程序时,我会从 Android Studio 收到多个错误。错误发生在任务中:compileDebugGroovyWithJack
它抱怨无法从外部依赖项(包括支持库)中找到任何类:
有没有人遇到过这个问题?这是一个相当大的障碍:(
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 的某些部分被缩小/混淆了。
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的回答很有帮助,但我想要更详细、更准确、更规范的答案。
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
非常感谢任何帮助。
android - 杰克似乎并没有自己混淆代码
我正在使用 Android Studio 版本v2.1.2
,Proguard
当我尝试对发布版本进行签名时不起作用,构建失败了。
根据开发人员文档中的此链接,杰克会自动进行混淆。
处理收缩、混淆、重新打包和 multidex 不再需要使用单独的包,如 ProGuard。
我不得不禁用minifyEnabled
标志并删除我们加载 proguard 文件的行;在这样做之后让它工作;我检查了apk
通过上述操作生成的文件,我无法判断 Jack 是否真的混淆并减少了冗余代码,因为发布apk
大小与调试apk
大小相同。
我需要了解如何使用较新的编译器进行混淆,因为文档并没有真正帮助。
我期待了解以下问题。
没有文件Jack
可以工作吗?Proguard
有没有办法指定Proguard
文件?
android - Android Jack 编译器没有从 proguard 规则中删除日志
我试过使用:
在 Proguard 中删除日志,如果我不使用新的 Jack 编译器,它会很好用
当我编译 apk 时,我注意到所有日志在生产版本中都处于活动状态。是否存在错误、错误或“-assumenosideeffects”尚不支持?
我可以从最终 apk 的日志中删除字符串吗?
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 :)
android - 使用 JACK 时生成的 proguard mappings.txt 文件在哪里?
我一直在尝试将最新的JACK 和 JILL 构建系统用于我的 android 项目。我知道 JACK 进程包括 proguard 处理。
但在那之后,我找不到用于回溯Google Play 开发人员控制台上提供的错误堆栈跟踪的mappings.txt文件。
请帮我找到 mappings.txt。
另一个相关的问题是在JACK时shrinkingResources是否仍然有效,因为shrinkingResources需要minifyEnabled true但JACK需要minifyEnabled false。
项目配置——
更新 -
T. Neidhart 发布的答案不是一个有效的解决方案。
android - 错误:数据绑定尚不支持 Jack 构建
我正在实施DataBinding
,它运行良好,但不允许我使用jackOptions
. Data Binding does not support Jack builds yet
它在构建时抛出错误。
这是我的build.gradle
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。
我知道invokedynamic
Dalvik 和 ART 都不支持指令操作数,但认为会有更优化的机制 - 否则 Android 中的 lambda 表达式支持只是语法糖..
相反,生成的字节码包含相同的匿名类:
为什么jack
编译器使用匿名类方法在字节码中表示 lambda 表达式,而不是更高效的方法,可能类似于 JVM 的invokedynamic
特性?