ARouter之混淆大坑

今天遇到一个问题

fragment中使用autowired进行注入,发现在混淆之后出现问题,无法成功注入了。

ARouter是如何找到对应的注入文件进行注入的?

@Route(path = "/arouter/service/autowired")
public class AutowiredServiceImpl implements AutowiredService {
    private LruCache<String, ISyringe> classCache;
    private List<String> blackList;

    @Override
    public void init(Context context) {
        classCache = new LruCache<>(66);
        blackList = new ArrayList<>();
    }

    @Override
    public void autowire(Object instance) {
        String className = instance.getClass().getName();
        try {
            if (!blackList.contains(className)) {
                ISyringe autowiredHelper = classCache.get(className);
                if (null == autowiredHelper) {  // No cache.
                    autowiredHelper = (ISyringe) Class.forName(instance.getClass().getName() + SUFFIX_AUTOWIRED).getConstructor().newInstance();
                }
                autowiredHelper.inject(instance);
                classCache.put(className, autowiredHelper);
            }
        } catch (Exception ex) {
            blackList.add(className);    // This instance need not autowired.
        }
    }
}

    通过如上代码实现的,我们发现,首先他获取被注入对象的类名,然后通过类名+$$Arouter$$Autowired进行拼接,获得注入类。然后进行构造注入。

    但是如果这个被注入的类在混淆的时候进行了混淆呢?但是你知道的,实际生成的注入类是不会被混淆的,因为它继承与ISyring类,该类在官方文档中明确指定不能被混淆。

    此时注入当然会失败了,因为根本找不到对应的类,所以我们需要保留被注入的类的类名:

    -keepnames class .......(随你自己喽)

转载于:https://my.oschina.net/zzxzzg/blog/1526332

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值