【问题标题】:ant release proguard fails, but under eclipse worksant release proguard 失败,但在 eclipse 下工作
【发布时间】:2014-11-13 23:48:25
【问题描述】:

我有一个相当大的项目,其中包含一个精心制作的 proguard.cfg 。

  • 这个项目在eclipse下构建OK,proguard运行无误,应用运行完美,这几个月来一直是我的正常工作流程。

我正在尝试使用 ant 从命令行构建它。

我已经更新了 build.xml 等项目及其库项目使用

 android update project -p .
 android update project -s --target android-17 -p .
  • 调试版ant debug构建成功
  • 但是,ant release 失败了 proguard,抱怨缺少课程。

据我所知(弹出许多非致命警告),这些问题与我的(数千个)类之一中缺少内部类以及依赖库项目的缺少 R(资源)有关。这很奇怪,这两件事都存在,图书馆项目从 eclipse 和 ant 构建得很好,而我不知道的内部类,父类非常琐碎。

为什么它是在eclipse下构建而不是使用命令行?更新的构建脚本不应该产生相同的结果吗?

Proguard:与 LIbrary 项目资源相关的错误

 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.CustomViewBehind: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R$id
 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.CustomViewBehind: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R$id
 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.CustomViewBehind: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R
 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.SlidingMenu: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R$styleable
 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.SlidingMenu: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R$styleable
 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.SlidingMenu: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R
 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivityHelper: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R$layout
 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivityHelper: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R$layout
 [proguard] Warning: com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivityHelper: can't find referenced class com.jeremyfeinstein.slidingmenu.lib.R

Proguard:未找到与内部类相关的

 [proguard] Warning: com.regaliz.gui.layouts.FunqRootLayout$2: can't find referenced class com.regaliz.gui.layouts.FunqRootLayout$1
 [proguard] Warning: com.regaliz.gui.layouts.FunqRootLayout$3: can't find referenced class com.regaliz.gui.layouts.FunqRootLayout$1
 [proguard] Warning: com.regaliz.gui.layouts.FunqRootLayout$SimpleAnimationListener: can't find referenced class com.regaliz.gui.layouts.FunqRootLayout$1
 [proguard] Warning: com.regaliz.gui.layouts.FunqRootLayout$SimpleAnimationListener: can't find referenced class com.regaliz.gui.layouts.FunqRootLayout$1
 [proguard] Warning: com.regaliz.gui.layouts.FunqRootLayout$SimpleAnimationListener: can't find referenced class com.regaliz.gui.layouts.FunqRootLayout$1

【问题讨论】:

  • 也许你应该关闭一些lint错误检查的选项。我在gradle中遇到过类似的情况(在gradle中,我将lintOptions.abortOnErrorlintOptions.checkReleaseBuilds设置为false)。Eclipse可能会关闭lint导出apk时错误检查,所以没问题。
  • 虽然这些错误看起来更与 proguard 相关,但您说得有道理,事实上,在 eclipse 下,我几乎关闭了 LINT,因为每次修改资源时它都会使我的构建时间飙升。你知道在Ant下怎么关掉吗?
  • 很抱歉我不知道Ant的用法。也许您可以就此提出一个新问题...

标签: android eclipse ant proguard release-mode


【解决方案1】:

这很奇怪,我通过反复试验找到了问题。

未找到的内部类是一个无辜的私有匿名可运行对象,例如:

private Runnable mBlinkRunner=new Runnable() {

    public void run() {
        .
        . couple simple lines 
        .

    }
};

我把它改成...

protected Runnable mBlinkRunner=new Runnable() {

    public void run() {
        .
        . couple simple lines 
        .

    }
};

它起作用了...我想知道为什么会发生这种情况,项目中应该有数百个这样的可运行文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多