Android studio 把 module 打包成一个 jar 包,如何将 module 下的 libs 目录中的所有第三方也打包进去? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qw30716
V2EX    Android

Android studio 把 module 打包成一个 jar 包,如何将 module 下的 libs 目录中的所有第三方也打包进去?

  •  
  •   qw30716 2017-03-08 15:28:12 +08:00 19351 次点击
    这是一个创建于 3155 天前的主题,其中的信息可能已经有所发展或是发生改变。
    task makeJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    ino('build/outputs/')
    include('classes.jar')
    include('libs/dnsjava-2.1.7.jar')
    include('libs/bcpkix-jdk15on-1.54.jar')
    include('libs/bcprov-jdk15on-1.54.jar')
    include('libs/netty-android.jar')

    rename ('classes.jar', 'IMAF.jar')
    }我这样做也不成功,不知道该如何解决
    17 条回复    2017-03-14 11:21:22 +08:00
    475797650
        1
    475797650  
       2017-03-08 15:43:08 +08:00
    module 打成 aar 包吧。资源文件都可以打进去
    nicevar
        2
    nicevar  
       2017-03-08 15:46:09 +08:00
    配置好之后直接用 gradle build 打成 aar 就行了
    qw30716
        3
    qw30716  
    OP
       2017-03-08 15:54:39 +08:00
    @475797650 jar 包不行是吧
    qw30716
        4
    qw30716  
    OP
       2017-03-08 15:57:21 +08:00
    @nicevar 打成 AAR 后也是找不到类,那个类是第三方 jar 包里面的
    475797650
        5
    475797650  
       2017-03-08 16:40:35 +08:00
    @qw30716 google 了一下方法好像跟你一样...
    qw30716
        6
    qw30716  
    OP
       2017-03-08 16:44:32 +08:00
    @475797650 aar 包就是包含了一些第三方 jar 包是吧
    475797650
        7
    475797650  
       2017-03-08 16:46:22 +08:00
    @qw30716 对的.
    nicevar
        8
    nicevar  
       2017-03-08 17:25:17 +08:00   1
    @qw30716 首先你要保证执行到了这个函数,另外 include 换成 from ,用 project.zipTree 来处理 jar 包
    task makeJar(type: Jar) {
    archiveName = 'myjar.jar'
    from(project.zipTree('libs/xxx.jar'))
    destinatiOnDir= file('build/libs')
    }
    这样直接 gradlew makeJar 就行了
    qw30716
        9
    qw30716  
    OP
       2017-03-08 18:35:31 +08:00
    @nicevar 谢谢,我也刚看到这个方法
    tongpeng1995
        10
    tongpeng1995  
       2017-03-08 18:54:12 +08:00
    @nicevar 并不行,如果你 compile 第三方的库,打包成 aar 后,第三方的库没有引用进去。我也是很头疼这个问题。然后 GitHub 上有 fat-aar 这个插件,但是又报了 multi define dex 的错误。
    nicevar
        11
    nicevar  
       2017-03-08 18:59:29 +08:00
    @tongpeng1995 什么并不行,你是根本没搞明白啊,这里面你配置过滤的,想要哪些类完全可以自己决定不要的 exclude 出去,你自己非要打多个进去肯定报错啊
    tongpeng1995
        12
    tongpeng1995  
       2017-03-08 19:07:04 +08:00
    @nicevar 比如你在 library A 里面 compile 了一个第三方的库 B ,然后打包成 aar 。
    你在你自己的项目 C 中调用 A 里面的代码(用到第三方库 B ),不会报找不到第三方库 B 的错误吗?
    我这边一运行就报找不到第三方库 B 的错误。然后在 GitHub 上找到一个项目叫 fat-aar 的,说是会把第三方的库也打包进 aar 。但是我一运行就报 Multiple dex files define 的错误。
    我在项目 C 里面并没有重复 compile 这个第三方库 B 呀。还是说我的用法不对?
    nicevar
        13
    nicevar  
       2017-03-08 19:16:33 +08:00
    @tongpeng1995 如果你 A 里面只是编译中使用了 B 库,而不是完全将 B 的类打进 aar ,你在 C 里面当然找不到类了,这种情况你依然要引入 B 库也就是你还需要引入 B 的 aar ,最简单的判断方法你解压出来 A 的 aar 看一下里面的 class 不就明白了,同样你用 fat-aar 打包出来的肯定是多次引入了,去检查一下编译过程
    另外将 jar 完全打入 aar 中这种需求很少碰到的,一般都是在厂商修改了 Framework 的情况下用到,平时的项目没必要,我觉得你们应该走向了一个误区,其实在 repositories 引入 aar 目录,然后在 dependencies 里面添加所需的 aar 就行了
    qw30716
        14
    qw30716  
    OP
       2017-03-09 08:41:48 +08:00
    @tongpeng1995 可以参考这个,但是有个问题,如果第三方 jar 包很多的话,最后你的 jar 包也很大 http://www.jianshu.com/p/5ba1a34e3fed
    tongpeng1995
        15
    tongpeng1995  
       2017-03-11 11:13:18 +08:00
    @nicevar
    @qw30716
    我走向一个误区了, AAR 并不需要处理依赖。依赖的处理应该是由 maven 来做。
    这是我踩过的坑 t/346638
    qw30716
        16
    qw30716  
    OP
       2017-03-11 15:44:14 +08:00
    @tongpeng1995 你的意思是只要把 Android module 打包成 jar 就行了,然后其中的依赖全部通过 maven 来完成?但是我对 maven 不是很熟悉,当其他工程调用我们的 jar 包时,如何能确保依赖完成?
    tongpeng1995
        17
    tongpeng1995  
       2017-03-14 11:21:22 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5723 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 06:16 PVG 14:16 LAX 23:16 JFK 02:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86