【发布时间】:2014-08-27 11:04:09
【问题描述】:
我有一个 Android 库项目和一个使用该库项目的应用。在应用程序的 build.gradle 文件中,我让 ProGuard 混淆了整个应用程序,包括库项目代码:
//from the app project
buildTypes{
release {
runProguard true
proguardFile 'proguard-project.txt'
}
debug{
runProguard false
}
}
一切正常,lib 项目和 app 项目都被混淆了。 但是,我想构建我的 lib 项目“standalone”,所以我可以在没有 app 项目的情况下分发它。这当然意味着自行混淆 lib 项目。
我不能通过在 lib-projects build.gradle 中使用 buildTypes 代码并简单地运行 proGuard 来做到这一点,因为这会破坏 app-project 构建,因为构建应用程序会再次编译它的代码已经混淆lib-项目代码... :-)
如果我在“独立”模式下构建 lib 项目,我需要仅运行 ProGuard,例如通过传递参数或执行特殊任务。
谁能指出我正确的方向?
【问题讨论】:
-
你的库是你项目中的一个模块吗?您可以使用自己的 proguard 配置文件为您的库模块创建一个 build.gradle。您的库公共方法的名称不能被混淆。
-
“这当然意味着自己混淆 lib 项目”——你为什么这么说?绝大多数作为 AAR 分发的 Android 库项目都没有经过混淆处理。
-
@CommonsWare:当然我只能为自己说话,而且我(或:我的雇主)宁愿通过反编译使我们的代码不可读。
-
@MartinCR:module 到底是什么意思?这是一个经典的 Android 库项目,可以独立于应用项目存在,如果这是您的问题。
-
@paul-latzelsperger 使用 Android Studio 每个模块(应用程序中的每个项目)都有自己的 build.gradle 文件,您可以在其中定义它是否会被混淆。我认为您应该为您的库创建一个特定的 proguard 文件,并混淆除公共方法名称之外的所有内容。