V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hotlook10
V2EX  ›  Android

android 打包 aar,第三方远程依赖无法打入包内,请大佬指教

  •  
  •   hotlook10 · 2021-01-28 18:12:58 +08:00 · 2231 次点击
    这是一个创建于 567 天前的主题,其中的信息可能已经有所发展或是发生改变。
    试过很多方法,fat-aar-android 打包之后,还是没有打入包内,请大佬指教
    16 条回复    2021-02-02 16:36:10 +08:00
    anxiousPumpkin
        1
    anxiousPumpkin  
       2021-01-28 18:53:02 +08:00
    这。。 是不是应该贴一点信息或特征出来?
    JayFang1993
        2
    JayFang1993  
       2021-01-28 19:31:17 +08:00
    https://github.com/kezong/fat-aar-android 亲试有效,可能你的姿势不对
    ZoteTheMighty
        3
    ZoteTheMighty  
       2021-01-28 19:39:11 +08:00
    @JayFang1993 正解,打 jar 或者 aar 包时如果是远程的依赖 as 不会打进包里,要用这个插件,或者下载下来手动依赖。apk 包就可以。
    chenjiajia9411
        4
    chenjiajia9411  
       2021-01-29 09:49:05 +08:00
    也有可能是你开了 minifyEnabled 然后被优化掉了。
    hotlook10
        5
    hotlook10  
    OP
       2021-01-29 10:03:43 +08:00
    @JayFang1993
    我们用的就是这个,打包的库引用了 Retrofit
    集成进去之后调用会报错
    java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/HttpUrl;
    at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:506)
    at com.zh.pocket.base.http.impl.RetrofitCallFactory.<init>(RetrofitCallFactory.java:20)
    at com.zh.pocket.base.http.impl.ApiFactory.<init>(ApiFactory.java:23)
    at com.zh.pocket.base.http.impl.ApiFactory.<clinit>(ApiFactory.java:16)
    at com.zh.pocket.base.http.impl.ApiFactory.create(ApiFactory.java:41)
    hotlook10
        6
    hotlook10  
    OP
       2021-01-29 10:12:33 +08:00
    @ZoteTheMighty 因为 retrofit 依赖 okhttp 的,所以会报上述错误,有解决方案吗

    java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/HttpUrl;
    at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:506)
    at com.zh.pocket.base.http.impl.RetrofitCallFactory.<init>(RetrofitCallFactory.java:20)
    at com.zh.pocket.base.http.impl.ApiFactory.<init>(ApiFactory.java:23)
    at com.zh.pocket.base.http.impl.ApiFactory.<clinit>(ApiFactory.java:16)
    at com.zh.pocket.base.http.impl.ApiFactory.create(ApiFactory.java:41)
    hotlook10
        7
    hotlook10  
    OP
       2021-01-29 10:13:22 +08:00
    @anxiousPumpkin

    打包的库引用了 Retrofit,集成进去之后调用会报错,因为 retrofit 依赖 okhttp 的,所以会报上述错误,请问下有解决方案吗
    java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/HttpUrl;
    at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:506)
    at com.zh.pocket.base.http.impl.RetrofitCallFactory.<init>(RetrofitCallFactory.java:20)
    at com.zh.pocket.base.http.impl.ApiFactory.<init>(ApiFactory.java:23)
    at com.zh.pocket.base.http.impl.ApiFactory.<clinit>(ApiFactory.java:16)
    at com.zh.pocket.base.http.impl.ApiFactory.create(ApiFactory.java:41)
    JayFang1993
        8
    JayFang1993  
       2021-01-29 11:04:18 +08:00
    @hotlook10 姿势不对 我之前是可以的
    hotlook10
        9
    hotlook10  
    OP
       2021-01-29 11:29:31 +08:00
    @JayFang1993 换了 3 种体位了
    xmt328
        10
    xmt328  
       2021-01-29 11:47:15 +08:00
    不建议把外部依赖打进去,让使用方自己去导入相关依赖
    HangoX
        11
    HangoX  
       2021-01-29 14:07:25 +08:00
    我提供另外一个思路吧,普通发布之后,新建一个 java 项目依赖这个依赖,然后打 war 包,这个时候你这个包需要的依赖都会出现在 war 包中,只是不是都在 aar 中,但是能都导入
    katana97
        12
    katana97  
       2021-01-31 19:51:02 +08:00
    先把 aar 传到 maven 仓库里,再引用就有了
    hotlook10
        13
    hotlook10  
    OP
       2021-02-01 09:36:57 +08:00
    @katana97 这种,我不知道怎么做混淆。。。
    AoEiuV020
        14
    AoEiuV020  
       2021-02-01 18:57:16 +08:00
    记得某个版本 android studio 有一个相关 bug, 其他没头绪的话更新 as 试试,
    AoEiuV020
        15
    AoEiuV020  
       2021-02-01 18:59:17 +08:00   ❤️ 1
    https://issuetracker.google.com/issues/140508065
    as3.5.0 提的 bug,3.6.0 解决的,版本在这范围的话先更新 as 再说,
    hotlook10
        16
    hotlook10  
    OP
       2021-02-02 16:36:10 +08:00
    @AoEiuV020 好的,谢谢,我试试
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1155 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 22:07 · PVG 06:07 · LAX 15:07 · JFK 18:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.