接入第三方aar页面找不到资源文件报空指针问题

       最近开发了一款二维码SDK给商户使用,但是我们提供的demo能正常运行,商户的接入时一直报

void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

       各种排查,取消混淆,各种依赖重新添加,权限的添加等等,就是找不到这个页面的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主界面重名了?

你可能感兴趣的:(android开发步步为营)