安卓studio打jar包,导入第三方jar包,ant合并jar包

说明

此文档主要为了解决安卓打jar包问题,当我们使用了第三方jar包的时候,有时候需要将第三方jar包一块打包到自己的jar包中,但是如果处理不好会出现“com.android.dx.cf.iface.ParseException: class name (…) does not match path(…)”问题,这个问题就是路径配置有问题,为了解决这个问题我使用了ant来合并两个jar包。如果我们的jar包给其他小伙伴使用,那么我们jar包中使用的第三方jar包可能会和小伙伴项目中的jar冲突,比如gson包,我通过jarjar.jar来给第三方jar包改名,这样就解决了重复的问题。

安卓studio打jar包配置

在当前moudle的builde文件中配置:

android{
...
}
//打包任务
task makeJar(type: Jar) {
//指定生成的jar名
baseName 'pickup'
//从哪里打包class文件,你可以自己选择,有的小伙伴是build/intermediates/bundles/release(debug)/
from('build/intermediates/classes/debug/com/x/x')
//from(project.zipTree('libs/mygson.jar')) //gson包
//打包到jar后的目录结构
into('com/x/x/')
//去掉不需要打包的目录和文件
exclude('BuildConfig.class', 'R.class')
//去掉R$开头的文件
exclude { it.name.startsWith('R$') }
}
makeJar.dependsOn(clearJar, build)

在studio的Terminal执行gradlew makejar命令执行打jar包操作,成功之后build的libs下找到打完的jar包

注意: //from(project.zipTree(‘libs/mygson.jar’)) //gson包

我注释的这一行要跟各位解释一下,我本来使用jarjar.jar将gson改成了mygson,然后没通过ant合并jar包,我想哪用这么麻烦,就使用了两个from来获取class文件,神奇的是Gradle真的可以打出来,使用也没出现问题,但是给别人打包的时候就抛出了com.android.dx.cf.iface.ParseException: class name (…) does not match path(…)这个bug。点开这种方法打出来的jar包,发现他的目录结构的确是有问题,比如我的jar包结构是a.b.c,而mygson的包名是x.y.z,最后gson下的class类就成了 a.b.c.x.y.z 下的,但是gson下的类包名却没有变成这种,而是和原先一样还是x.y.z,最后就导致了打包时产生了路径不匹配的错误,于是我抛弃了Gradle合并打包的思路,转投了ant。

使用jarjar来更改jar包包名以解决jar包冲突问题

这里我们以 gson.jar 为例,在 gson.jar 包目录下新建一个文本文件,名字随意,例如 rule.txt,写入下面的内容。

rule com.google.gson.** com.google.mygson.@1

上面写的就是修改规则,我们将包名中的 gson 修改为 mygson。打开命令行,输入如下命令。

java -jar jarjar-1.4.jar process rule.txt gson.jar mygson.jar

命令执行完毕,同目录下会多出一下 mygson.jar,这个就是修改包名之后的 jar 文件,我们项目导入这个 jar 包使用即可。

使用ant来合并两个jar包

1.配置环境变量

注意将bin和lib目录都加入到path中

2.构建build.xml文件用于执行ant命令


               //不用改

        //不用改

   	                    //合并后的jar文件的名称
                  // 标签的都是要参与合并的子jar包
    
     


3.cmd执行合并命令

ant -buildfile E:\android\gson\build.xml

4.下面是参考资料,而我只是代码的搬运工:

https://blog.csdn.net/qq_15131627/article/details/79732918

https://blog.csdn.net/zhouyingge1104/article/details/53349277

你可能感兴趣的:(安卓)