如果ProGuard存在注释,则构建失败

时间:2016-04-23 22:39:47

标签: java android android-gradle proguard release

如果我在应用中留下调试代码,我想使构建失败 是否可以通过ProGuard执行此操作?如果是这样,怎么样?

这就是我目前的情况:

/** Annotate methods that shouldn't be used in production. */
@Retention(RetentionPolicy.CLASS) // TODO which one?
@Target({CONSTRUCTOR, METHOD, TYPE})
public @interface DebugHelper {
}

class Utils {
    /**
     * Dig up object's internals (with reflection if need be)
     * and convert them to string. Useful for View/Fragment/Bundle/etc.
     */
    @DebugHelper
    public static String toString(Object value) {
        ...
    }
}

我们说我不小心在代码中留下了Utils.toString(veryBigObject)。我正在寻找一种方法来使构建失败(或输出注释/警告线)。请注意,有许多类和方法都是这样注释的,因此逐个列出它们不是解决方案。

或者如果以上情况不可能,我会很高兴如果ProGuard可以摆脱这些电话(加快发布的应用程序)以及所有注释的方法/类@DebugHelper (为了减小尺寸)。

我试过了:

-assumenosideeffects class ** {
    @net.twisterrob.java.annotations.DebugHelper <methods>;
}

但它给了我

  

注意:配置指定没有类&#39; **&#39;的方法。有任何副作用   注意:有1&#39; -assumenosideeffects&#39;尝试将所有方法与通配符匹配的选项。这可能会导致`wait()&#39;等方法出现问题。并且&#39;通知()&#39;。您应该更精确地指定方法。 (http://proguard.sourceforge.net/manual/troubleshooting.html#nosideeffects

即使注释非常具体。

1 个答案:

答案 0 :(得分:0)

在您的情况下,该消息是无害的,因为如果指定了注释过滤器,则相应的代码不会考虑。