码迷,mamicode.com
首页 > 移动开发 > 详细

Android 开发中踩过的坑之九: 发布一个aar的注意事项

时间:2015-08-14 22:55:56      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:

现在Android支持aar格式发布一个模块, 提供给其他人使用. 

aar其实是jar和一些资源文件的zip包. 解决了过去jar包不能分享资源的局限.


1 要尽量避免定义内部接口,

这其实是一个编程习惯, 接口interface最好是独立定义, 避免定义在类的内部. 

因为当你发布aar时, 内部的接口在混淆后会独立成一个外部的接口Outer$InnerInterface.

然后麻烦来了, 别人在实现这个类的时候必须也写成XXX implement Outer$InnerInterface{}的形式. 否则是找不到这个类的.

想写成XXX implement Outer.InnerInterface{}是不行的, 因为在Outer里没有这个InnerInterface的定义, 在混淆后, 所有的内部类都被改写成了形如Outer$Inner的外部类了. 包括interface, enum, 等等.

更糟糕的是, 你很可能只是发布项目的一部分代码作为aar,  那你的项目内已经引用的Outer.Inner的类或接口都必须写成Outer$Inner的形式, 否则编译不过, 否则运行时找不到类. 所以, 为了以后不必要的麻烦, 尽量避免使用内部类, 内部接口, 

除非你确认不会混淆代码, 或者会将所有定义和调用都参与混淆.


2 使用maven发布需要将所有依赖都发布到maven上

如果你发布多个aar, 每个aar互相依赖, 那么你需要将这些依赖都以maven的形式定义, 否则会在编译时, maven解析某个aar的pom时会报空指针异常. 

maven的形式定义:

apply plugin: ‘maven‘
compile ‘com.nineoldandroids:library:2.4.0+‘


3 res内定义的属性或者名称, 都应当加上前缀

你的aar里定义资源文件是很正常的事, 资源文件很有可能和别人的资源重名, 而悲剧的是, 别人很有可能是引用了另外一个aar导致与你重名. 他无法修改那个aar的资源名, 就像他不能修改你的aar资源名一样. 为了避免这种尴尬, 最好在定义的资源程前加上一个前缀, 比如你的模块简写,商标简写等等. 避免冲突, 还能打个广告, 何乐而不为.




Android 开发中踩过的坑之九: 发布一个aar的注意事项

标签:

原文地址:http://my.oschina.net/u/1393188/blog/492576

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!