android studio下导出jar(java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unex)

eclipse导出jar很简单,可以选择某个文件或者所有文件导出jar包。
这里写图片描述
android studio就比较尴尬了,需要在相应库工程module的build.gradle中配置gradle脚本。

1. 配置gradle环境变量

如果windows命令下执行gradle -v时提示’gradle’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。那么就表示你没有配置过gradle环境变量。
这里写图片描述

首先找到你的gradle在哪里?可以在android studio安装目录:
这里写图片描述

也可以在as下载gradle的目录:
这里写图片描述
或者,你下载个gradle,然后解压下。

接着就是创建gradle环境变量啦,变量名“GRADLE_HOME”,变量值就是上面的gradle目录的路径。
这里写图片描述

将此路径加入到Path变量中
这里写图片描述

再试下gradle -v命令,安装OK
这里写图片描述

2. as下所有类导出jar

这里我建了一个library简单工程,只有两个类:接口类和实现类。
这里写图片描述

如果我把整个工程的所有类导出jar的话,只需要在module的build.gradle下配置配置下gradle脚本
这里写图片描述
箭头所指就是需要修改的文件,红框内就是添加的脚本,每行的注释也很清楚。

task clearJar(type: Delete) {
    delete 'libs/sdk.jar'
}
task makeJar(type:org.gradle.api.tasks.bundling.Jar) {
    //指定生成的jar名
    baseName 'sdk'
    //从哪里打包class文件
    from('build/intermediates/classes/debug/fota/adups/myapplication/')
    //打包到jar后的目录结构
    into('fota/adups/myapplication/')
    //去掉不需要打包的目录和文件
    //exclude('test/', 'BuildConfig.class', 'R.class','ILoader.class')
    //去掉R$开头的文件
    exclude{ it.name.startsWith('R$');}
}
makeJar.dependsOn(clearJar, build)

class文件路径from('build/intermediates/classes/debug/fota/adups/myapplication/'),这个路径其实就是下面的路径
这里写图片描述

jar包路径into('fota/adups/myapplication/')是为了兼容后面的类对应关系的,如果我写成into('build/gaga/')呢,那打出jar的目录结构是这样的
这里写图片描述
细心的应该看到了,这里的路径会决定后面生成的jar里面的包名,所以为了兼容后续使用,就把路径写成包名了。否则在使用dx --dex --output=test.jar dynamic.jar命令转化dex时会出现不兼容错误:
class name (fota/adups/myapplication/BuildConfig) does not match path (build/gaga/BuildConfig.class)
这里写图片描述
搞成这样就不会报错啦,不信你看
这里写图片描述
这里写图片描述

3. as下指定某个或某几个类导出jar

按照上面的包名做路径把所有类导出为jar,dex转换也成功了,但是实际使用时出问题了,直接把宿主搞挂了java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
这里写图片描述
网上提示说jar不需要带上接口文件,那就去掉吧,只留下JarLoader.class得了。
加上这句过滤就完美了

//去掉不需要打包的目录和文件
    exclude('test/', 'BuildConfig.class', 'R.class','ILoader.class')    

这里写图片描述
只剩下实现类了,妈妈再也不怕类冲突了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值