Android Proguard - 如何保持 onClick 处理程序仅从 XML 布局引用
在我的 Android 应用程序中,我通常不会在代码中创建视图的单击处理程序,而是依赖于在 XML 布局文件中指定它的能力,如下所示:
<Button
....
android:onClick="onSearchClicked"
...../>
然后在 Activity 中使用该方法,如下
public void onSearchClicked( View v ) {
........}
所示 :在我自己的代码中没有明显引用此方法。
当为生产版本运行 Proguard 时,它似乎删除了此方法并且单击失败。
我可以在我的 proguard 配置文件中添加什么来避免这种情况,而不会迫使我重命名所有这些方法?
- 我可以添加到方法中并让 proguard 注意到的注释吗?
- 以某种方式指定从 xml 引用的这些类型的方法?
- 我想我可以在代码中添加错误的引用,但如果可以的话我想避免这种情况,因为我不会总是记得将其放入!
我浏览了 Android 的 proguard 示例,但看不到任何满足此特殊需求的内容。
In my Android app I ofter don't create a View's on-click handler in code, but rely on the ability to specify it in the XML layout file, like this:
<Button
....
android:onClick="onSearchClicked"
...../>
And then have the method in the Activity like this:
public void onSearchClicked( View v ) {
........}
Meaning there is no obvious reference to this method in my own code.
When running Proguard for a production release it seems to remove this method and the on-click fails.
What can I add to my proguard config file to avoid this that won't oblige me to rename all these methods?
- An annotation I could add to the method and have proguard take notice of?
- Somehow specify these types of methods referenced from xml?
- I suppose I can add a false reference in the code, but would like to avoid that if I can as I won't always remember to put it in!
I have looked through the proguard examples for Android and can't see anything for this particular need.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这似乎是最好的答案,因为它对于此类方法的命名是 100% 稳健的:
希望它有帮助。
This seems to be the best answer, as it is 100% robust to naming of such methods:
Hope it helps.
但请从 proguard 文档中仔细检查:
http://proguard.sourceforge.net/index.html#/manual/refcard .html
but double check it from proguard doc :
http://proguard.sourceforge.net/index.html#/manual/refcard.html
我使用:
然后我将所有 onClick 方法命名为:onCancelBtnClick()、onBackgroundClick() 等。
I use:
and then I name all onClick methods like: onCancelBtnClick(), onBackgroundClick(), etc.