AndResGuard
AndResGuard copied to clipboard
针对xml属性自动设置白名单
ConstraintLayout 中Group 新出来个属性constraint_referenced_ids,其中添加id的名字,可以对这些id进行统一的设置。但混淆之后就找不到这些id了。 所以可不可以做到扫描constraint_referenced_ids 里所引用的id,如果有则自动加入到白名单中?
可否提供一下复现方法和出错信息?
这个不算bug,就是希望可以有更加简洁的方式。 Group使用如下: <android.support.constraint.Group android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" app:constraint_referenced_ids="title,content" /> app:constraint_referenced_ids 里引用了其他两个id title和content,group初始化时会根据字符串title 用getIdentifier去找这个id,如果被混淆了,就会出现这个log:ConstraintHelper: Could not find id of "title",造成界面处理有些问题。 我现在是通过将这些id手动加入白名单解决问题的,如果可以做到自动就更好了
同样遇到该问题
@ZhangGeyz 查看源码后建议:不在xml 中定义Group, 在代码中初始化Group, 再调用ConstraintHelper#setReferencedIds 绑定关联视图id, 绕开构造方法中getIdentifier 获取Group 所关联的视图的id值 这种方案,目前个人觉得这种方案较好!
@wuhaiyang 不在xml绑定会有些麻烦,我采用的方案是在xml定义的id约定必须采用统一的前缀,然后白名单过滤这些
其实你可以keep住所有id,在团度开发中,混淆id会带来一些意想不到的问题
android.support.constraint.Barrier 控件也遇到了同样的问题
碰到同样的问题,所以这个问题的最佳实践是?
@sw926 +1一旦混淆barrier就失效了
在whiteList中设置了"R.id.*" 为什么还是会失效 不知道是不是跟ThinR有关
这个问题的解决办法很简单,在代码中手动调用一下setReferencedIds()就搞定了
遇到同样问题,虽然可以通过手动调用setReferencedIds()或加入whiteList解决,但平时开发完全忘记在用AndResGuard这个库,会忘记处理的,然后可以把问题流出到线上了
同遇到该问题,这个问题在开发测试阶段都比较难察觉,如果能有一个对开发者透明的方案防止遗漏对referencedId的处理,对开发者来说会比较友好
找了好久最终才定位到时Group的问题,希望作者能在README.md上提醒下