最近公司决定将一个APP的部分模块功能内容移植到另一个模块的app项目中,要求代码不要全部暴露出来。然后在网上查了一下,可以将项目生成arr文件和jar包的形式放在另一个项目的libs下来使用。
*.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。
*.aar:包含所有资源,class以及res资源文件全部包含
如果你只是一个简单的类库那么使用生成的*.jar文件即可;如果你的是一个UI库,包含一些自己写的控件布局文件以及字体等资源文件那么就只能使用*.aar文件。我使用的是arr文件。
使用步骤:
1.将你需要生成arr文件的项目转换成library
2 将生成的library作为一个module放在一个新建的项目中
3.运行起来你新建导入有module的项目,这个时候就会在module下生成arr文件
4.将生成的arr文件放入你想要移植的项目libs下面,arr文件名可以自己命名。
5 build.gradle 配置文件中添加
- repositories {
- flatDir {
- dirs 'libs'
- }
- }
- dependencies {
- compile(name:'quwanma', ext:'aar')
- }
注意: compile(name:'quwanma', ext:'aar') 这里的name对应的quwanma要和你的arr文件的名字一致
6 然后重新编译一次项目就可以正常使用了。
这时打开你的项目地址”\build\intermediates\exploded-aar\“你会发现下面多了一个文件夹”genius“打开后能看见里边包含了一个”classes.jar“文件与一些资源文件和”R.txt“文件。
注意:
我们会碰到一下几个问题
1、编译时会报jar冲突,因为你的arr文件引用了和目前项目相同的jar包,删除当前项目的jar包,让它引用arr文件里的jar包。
2、arr文件中的类名和布局命名不要和当前项目相同,否则arr文件的类名和布局会找不到或者arr文件里会引用当前项目的资源
3、arr文件中的在application里需要初始化的东西都需要在当前项目的application里面初始化,因为那第一个声明的才会被PackageManager解析,才是有效的。