Android Proguard - 如何保持仅从 XML 布局引用的 onClick 处理程序

标签 android proguard

在我的 Android 应用程序中,我通常不会在代码中创建 View 的点击处理程序,而是依赖于在 XML 布局文件中指定它的能力,如下所示:

   <Button
        ....
        android:onClick="onSearchClicked"
       ...../>

然后在 Activity 中有这样的方法:

    public void onSearchClicked( View v ) {
    ........}

意思是在我自己的代码中没有明显引用这个方法。

当为生产版本运行 Proguard 时,它似乎删除了这个方法并且点击失败。

我可以在我的混淆器配置文件中添加什么来避免这种不需​​要我重命名所有这些方法的情况?

  • 我可以添加到方法中并让 proguard 注意到的注释吗?
  • 以某种方式指定从 xml 引用的这些类型的方法?
  • 我想我可以在代码中添加一个错误的引用,但我想尽可能避免这种情况,因为我不会总是记得把它放进去!

我已经查看了适用于 Android 的混淆器示例,但看不到满足此特定需求的任何内容。

最佳答案

这似乎是最好的答案,因为它对此类方法的命名具有 100% 的鲁棒性:

# This will avoid all the onClick listeners referenced from XML Layouts from being removed
-keepclassmembers class * extends android.app.Activity { 
       public void *(android.view.View); 
}

希望对您有所帮助。

关于Android Proguard - 如何保持仅从 XML 布局引用的 onClick 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216685/

相关文章:

android - 使用 ServiceHandler 和 AsyncTask 从本地主机获取 JSON 文件

android - 更改首选项的高度

android - -optimizationpasses 大于 2 时的 Proguard 错误

android - 如何在 Android 中保护调用 web 服务

android - 如何使用ProGuard保护apk不被反编译?

javascript - 移动应用程序——同时使用 Project Tango 和 Ionic 和/或 angular

java - Android Studio : Can't associate . 具有文件类型的 mp3 文件

android - VPN与android的连接

android - 在多个应用程序模块中重复使用 proguard-rules.pro 文件

android - minifiedEnabled 导致渲染脚本崩溃 >Kitkat