grade中远程仓库的so导⼊
⼯作记录:今天偶遇需求 上传so和jar为三⽅库,使其他⽤户可以使⽤gradle 配置获取三⽅so库
之前并没有接触过maven与jcenter的⼩⽩果断的google了⼀下
收获1.jcenter与maven都可以⾃⾏配置上传资源库,但是流程复杂,第⼀次配置还需要审核,另外就是项⽬必须开源,⽬前还未到不开源的⽅式(如有错误或其他解决⽅法,望不吝赐教)
有兴趣的可以去看看这些资料:
收获2.另⼀种⽅式是⾃⼰搭建私服来上传资源库,这种⽅式⼀劳永逸,不需要开源,但是耗费成本较⾼。
就在纠结要不要⾃⼰去搭建maven私服的时候意外发现公司内部已有⽜⼈搭建了⼀个对外的maven私服。
剩下的就是点点⼿指头上传了 。当我以为这个任务就这么结束了的时候,事实证明了我的天真。。。
⾸先jar包在上传以后使⽤起来很简单
a.添加maven私服地址
在adle中添加maven{url "私服地址"},如下:
allprojects{
repositories {
jcenter()
maven {
url"mvnrepo.********/mvn/repository"
}
}
}
b.在依赖中添加 GAV,如下:
dependencies{
compile fileTree(include:'*.jar',dir:'libs')
compile 'com.demo.api.android:test:0.0.1'
}
简简单单两步就将⼀个jar引⼊了⼯程
但是so库并没有这么简单。。。。。。。。。。
但是so库并没有这么简单。。。。。。。。。。
但是so库并没有这么简单。。。。。。。。。。
maven打包本地jar包
原因:导⼊后并不能被正确的识别
⾸先官⽅推荐做法应该是so库与jar⾥的源码⼀起打成aar包再上传到maven,偏偏在下这边的需求⽬前是已有jar包,需要单独添加依赖的so库。遇到问题解决问题乃⼈⽣⼀种乐趣。⼆话不说继续google爸爸。
功夫不负有⼼⼈,在⼀堆纠结本地导⼊so的帖⼦中到⼀位⼤神的解决⽅案。
收获2.⼤神提供了⼀个gradle插件,叫做android-native-dependencies
实现原理应该是gradle中获取到so后复制到特定的⽬录下,但是需要引⼊插件⽐较不⽅便⽽且配置会随着so增多⽽变复杂。
有没有更加简单的⽅式,答案当然是yes
就在寻插件的过程中有位在stackoverflow上的提问⽤户提供的⼀些信息吸引了我
收获3.⽂中提到另⼀种⽅案:将so打包为jar库,然后再引⼊。提问者⾃⼰解压apk后得到so的路径为lib/armeabi*/*.so 。另外在回答者的gradle 脚本中得到了验证,总结为:将so打包到xxx.jar下,⽬录为lib/armeabi*/*.so.再将xxx.jar引⼊就可以了。也就是将so的导⼊⽅式转变为了⼀个普通的jar包的⽅式,具体参考上⽂。
⾄此,本⼈的需求可以通过如下实现:
1.将so⽂件带上级⽂件夹⼀起统⼀拷贝⾄lib⽬录下并打包为armeabi.jar,⽬录结构参考:
-/lib
---/armeabi
------aaaa.so
------bbb.so
---/armeabi_v8
------aaaa.so
------bbb.so
2.上传armeabi.jar⾄maven中⼼库私服
3.项⽬中引⼊
结尾:虽然本⽂记录的解决⽅案适⽤范围⽐较⼩,只限于需要将jar包和so包分开上传maven中⼼库的需求,但是在解决这个问题的过程中丰富了⾃⼰的知识,也了解到了不同的so导⼊⽅式。因此以此⽂记录,希望可以帮到和我有相同需求的童鞋。
ps:⽂笔崩坏,轻拍。⼩⽩⼀名,有任何错误或建议,敬请斧正,⽆任欢迎^.^

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。