最近开发了一款二维码SDK给商户使用,但是我们提供的demo能正常运行,商户的接入时一直报
各种排查,取消混淆,各种依赖重新添加,权限的添加等等,就是找不到这个页面的id为title的TextView,后来加了段代码调试当前页面都有哪些元素
setContentView(R.layout.activity_main); getAllChildren(View.inflate(MainActivity.this, R.layout.activity_main, null));
/**
* 获取子view测试(切记demo里面view 名称不能和sdk
* 里面一样取名activity_main,否则会获取到demo里面的) .
* @param v
* @return
*/
private ArrayList getAllChildren(View v) {
if (!(v instanceof ViewGroup)) {
ArrayList viewArrayList = new ArrayList();
viewArrayList.add(v);
return viewArrayList;
}
ArrayList result = new ArrayList();
ViewGroup viewGroup = (ViewGroup) v;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View child = viewGroup.getChildAt(i);
if(child instanceof TextView)
{
String title=((TextView) child).getText().toString();
}
ArrayList viewArrayList = new ArrayList();
viewArrayList.add(v);
viewArrayList.addAll(getAllChildren(child));
result.addAll(viewArrayList);
}
return result;
}
发现R.layout.activity_main其实是demo的view怎么会这样呢?原来demo里面也叫R.layout.activity_main,所以命名的时候,切记aar里面的主界面的命名不要和商户APP主界面同名,后来我把我们aar里面R.layout.activity_main改成R.layout.activity_sdk_main就没问题了。不知道这算不算android的bug?理论上已经运行到aar里面了,应该调用自身的view的啊。下次谁碰到这种问题,找不到资源,想一想aar里面的主界面命名是不是和自身APP主界面重名了?