最近公司需求将一个module打包成aar提供给其他项目使用,打包的过程不表,如果不清楚的话可以上网查找,一大推相应的文章。今天要说的是使用aar的时候遇到的一些问题。

1.将aar包放入主工程lib以后,gradle配置正确,但是访问aar里面的activity的时候出现无法打开activity组件,提示是未在manifest里面注册,试了很多方法,甚至在主工程manifest里面注册activity,结果还是打不开,最终发现是aar包里该activity所用的layout文件名和主工程的某个layout重名,改之,并且将layout里面的组件id改成唯一,问题就解决了。

2.打包成aar以后,由于在gradle里面已将该module定义为library,application id也去掉了,所以该module不再是一个application,问题也就来了,如果之前用该module打包成apk进行过调试,那么代码里面或许会有自定义的MyApplication类。我们通过该application获取过context之类。那么在打包成aar之后,如果未做修改,去访问用到MyApplication的类的时候,会出现空指针异常,解决方案就是在用到MyApplication.getContext方法的地方换成getApplicationContext,这样一来,获取到的context就是主工程下的context,也就不会出现空指针了。

3.如果该aar包里面有微信支付,分享等第三方库,你要在主工程中使用,要记得在gradle里面替换applicationId,或者用你主工程的包名和key去获取第三方操作的key和id

4.在使用aar的时候最好在主工程也添加aar所用到的依赖,不然容易出现classNotFound错误。

5.这个和第3个有点类似,如果在aar的MyAppliction里面使用了类的管理器,那么在打包成aar的时候需要将代码抽出来做个独立的类管理器,记住一点,打包成aar之后所有和application有关的东西都要检查替换,避免出现空指针异常。

以上就是几点个人总结,希望对使用aar的同学有帮助。