Android 库项目:混淆并保留资源

Posted

技术标签:

【中文标题】Android 库项目:混淆并保留资源【英文标题】:Android Library Project: Obfuscate and keep resources 【发布时间】:2012-03-03 00:01:29 【问题描述】:

我想用 Proguard 编译我的 android 项目和一些额外的 Android 库项目。事实上,大部分代码和资源都在这些库中。

我已经在主项目的 project.properties 中添加了行“proguard.config=proguard.cfg”,我已经配置了 cfg 文件(-libraryjars ..\libs)。然后 - 右键单击​​,Android 工具 -> 导出签名的应用程序包。 ADT 编译项目发布,但应用程序在第一次启动时崩溃:我从日志中读取,这是因为资源指针错误。

我反编译了项目,发现很奇怪:如果我在库中声明资源,那么它上面的资源指针就变成了0。

当我将“proguard.config=proguard.cfg”行添加到我所有 Android 库项目的 project.properties 中时,问题并没有消失。

有什么解决办法吗?

编辑:查看 proguard.cfg 的片段:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !

-printusage unused.txt
-optimizationpasses 2
-printmapping mapping.txt
# -overloadaggressively
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt

-libraryjars ..\libs

【问题讨论】:

为什么在库项目中需要 proguard 配置?使用的是目标项目中的 proguard 配置。 在库项目中添加或删除“proguard.config”都没关系。我只是为了完整的信息而谈到它。 发布你的 proguard 配置文件。 【参考方案1】:

您确定您拥有最新的工具吗?像 Eclipse Indigo、ADT v16.0.1 和 proguard 4.7?在更新到最新工具之前,我也遇到了问题。

【讨论】:

我使用 ADT 的最新更新(我会定期检查更新)和 Android 工具。 Eclipse 有“Helios”版本。 因为今天 ADT 插件让我用混淆编译库,我决定关闭问题并将接受的答案赠送给你。【参考方案2】:

您如何包含/引用您的 Android 库项目?如果我没看错,您将它们添加为罐子吗?如果是这样,您确实可能会在图书馆项目提供的资源方面遇到一些麻烦。

如果我是对的,请尝试:

使用项目设置并在那里添加您的库项目。不要为此使用一些导出的罐子。 Android 库项目的工作方式与普通 Java 库的工作方式截然不同。

【讨论】:

如您所描述的,我包含了 ALP 的参考:项目设置 -> 添加库。没有导出的罐子。

以上是关于Android 库项目:混淆并保留资源的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio中的混淆

如何防止 Dexguard 混淆 android studio 中的资源文件夹?

android库项目混淆

Android 构建和混淆库项目

如何用 Eclipse 混淆 Android 库项目?

Proguard 可以混淆 Android 库项目 (APKLIB) 吗?