由于客户网络环境无法访问我提供的广域网的maven仓库地址,需要我提供本地jar包的方式,因此来看看我们需要怎么弄。
一、导出jar 1.首先需要创建一个app工程并且new 一个moudle,既然想封装成一个库那么肯定要在moudle里进行编代码吧,这里就不做过多的陈述,我直接拿项目作为案例。这里你要保证app依赖moudle模块,并且能正常运行。
2.在library下的build.gradle文件添加如下代码
//打jar包task makeJar(type: Copy) { //这行表示要打包的文件的路径,根据下面的内容,其实是该路径下的classes.jar from('build/intermediates/packaged-classes/release/') //这行表示打包完毕后包的生成路径,也就是生成的包存在哪 into('build/libs/') //看到这行,如果你对分包有了解的话,你就可以看出来这行它只是将一些类打包了 include('classes.jar') //重命名为mySdk.jar rename ('classes.jar', 'mySdk.jar')}makeJar.dependsOn(clearJar, build)//在终端执行生成JAR包// gradlew makeJar
3.生成的jar,如图所示
4.使用jar包
新创建一个app工程,将新打好的mySdk.jar文件放入到libs目录下,点击运行
5.app崩溃,查看下日志提示缺失so文件,这个libface_api.so是moudle中lib目录下的so文件,这说明mySdk.jar并不会存在so文件,需要额外自己放入到项目中去,放进去后成功运行。
6.能运行不代表没有问题,仔细查看日志,发现mySdk.jar中的一个Service并没有成功开启。原因是因为mySdk.jar文件里不存在清单文件,需要宿主app自己去清单文件里注册,注册成功后才是真正大功告成。
相比第一种方式打jar包来讲,第二种方式要简单很多,点击下assembleRelease命令即可,会在build/outputs/aar目录下生成aar的release文件。
直接在新创建的app项目中使用即可,引入aar文件记得要在app build,gradle文件里加如下代码
repositories { flatDir { dirs 'libs' }}
注意事项
如果sdk里存在第三方依赖库,如果不做处理,默认无论是jar包还是aar文件都不会存在第三方依赖库的代码,所以需要宿主app自己去依赖相关sdk。其实也可以将moudle所依赖的jar包打入到新的jar包里,这里不做讨论。
将两个文件后缀改成zip,然后解压,发现jar里只有class文件,并且不包含其他第三方jar的class文件,而aar文件包含了jar包,以及清单文件,资源文件,so文件等。
jar文件解压后
aar文件解压后
1.jar包里不存在清单文件,资源文件,so文件,只包含了class文件,而aar文件几乎包含了上述所有。
2.如果sdk里存在第三方依赖库,如果不做处理,默认无论是jar包还是aar文件都不会存在第三方依赖库的代码。
1.https://www.jianshu.com/p/0a2572a63ed5
2.https://www.jianshu.com/p/1589be7962cd