使用(兼容性)库的安卓项目中使用Proguard

5
我正在尝试通过Package Explorer导出Android应用程序的内置Proguard支持来使用Proguard。主项目使用一个库项目,该库项目又使用了android兼容性库,并且它本身也使用了这个兼容性库。基本上就像这样:
BaseLibraryProject BaseActitivity libs:android-support-v4.jar MainProject 使用库BaseLibraryProject libs:android-support-v4.jar 这个应用程序在设备和模拟器上都可以正常运行。但是Proguard会发出很多警告并以代码1退出。
这是与Proguard相关的列表的最后一部分:
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb: can't find referenced class android.widget.SearchView
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb: can't find referenced class android.widget.SearchView
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb: can't find referenced class android.widget.SearchView$OnQueryTextListener
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb: can't find referenced class android.widget.SearchView
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb$1: can't find referenced class android.widget.SearchView$OnQueryTextListener
[2012-04-09 14:19:49 - MainProject] Warning: android.support.v4.widget.SearchViewCompatHoneycomb$1: can't find referenced class android.widget.SearchView
[2012-04-09 14:19:49 - MainProject] Warning: there were 131 unresolved references to classes or interfaces.
[2012-04-09 14:19:49 - MainProject]          You may need to specify additional library jars (using '-libraryjars').
[2012-04-09 14:19:49 - MainProject] Warning: there were 29 unresolved references to program class members.
[2012-04-09 14:19:49 - MainProject]          Your input classes appear to be inconsistent.
[2012-04-09 14:19:49 - MainProject]          You may need to recompile them and try again.
[2012-04-09 14:19:49 - MainProject]          Alternatively, you may have to specify the option 
[2012-04-09 14:19:49 - MainProject]          '-dontskipnonpubliclibraryclassmembers'.
[2012-04-09 14:19:49 - MainProject] java.io.IOException: Please correct the above warnings first.

如您所见:它无法找到兼容库。

这是带有-libraryjars和-dontskipnonpubliclibraryclassmembers的proguard.cfg文件的开头:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-libraryjars libs/android-support-v4.jar

并没有什么区别。我尝试了各种将库添加到BaseLibrary项目/主项目的组合方式,使用了完全限定路径名。似乎没有任何帮助。

大多数关于proguard的stackoverflow问题似乎都涉及设置Ant。您有什么想法是什么原因导致这个问题,以及如何在使用多个库的此项目上使用Proguard?

提前感谢您的帮助。

1个回答

17

ADT 17发布带来了很多改进,其中包括更好的默认设置。我认为这应该解决了你的支持库问题。

详见 - http://tools.android.com/recent/proguardimprovements

Eclipse (project.properties)

从ADT 17开始,default project.properties文件现在包含以下行,引用了标准的Proguard配置文件(proguard-android.txt)和项目特定的Proguard配置文件(proguard-project.txt)...

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

我建议创建一个新的Android项目,以了解其布局并使用这些新文件。随着Proguard和默认配置的改进,您的应用将从中受益。

更新

Gradle(build.gradle)

以下内容将同时使用默认的标准proguard配置和本地项目proguard规则。

android {
    release {
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
 }

3
只需添加一行代码 proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt 并删除 proguard.cfg 文件即可使其正常工作。 - Gerrit Beuze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接