关于安卓子模块打包,aar,jar丢失问题

背景

项目中,三方依赖是一个本地子module,子module中,又引入了一些aar,jar包。这个时候,如果子module要输入一个aar包给业务侧调用,观察打包结果。

问题

如果直接使用gradle进行打包,会导致子module中引入的aar,jar包导入失败,这个时候,主项目如果有用到这些aar包或者jar包,就会报错,提示找不到这个依赖。
通过打开生成的产物,也可以观察到,lib目录下,是没有引入到这些aar,jar包的。

修复

思路:主要原因,是这个子模块在打包的过程,没有把自己的三方依赖一起打包。
方式:
使用三方库进行导入:fataar
这个库,主要是打包的场景下用到的,专门处理这种打包三方依赖丢失的问题,详情用法,文档中有。
这里简单说明一下:
(1)根build.gradle引入:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.github.kezong:fat-aar:1.3.8'
    }
}

(2)需要打包的子module引入(输出aar的module)

apply plugin: 'com.kezong.fat-aar'

(3)子module引入三方依赖时的语法处理

dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    // java dependency
    embed project(path: ':lib-java', configuration: 'default')
    // aar dependency
    embed project(path: ':lib-aar', configuration: 'default')
    // aar dependency
    embed project(path: ':lib-aar2', configuration: 'default')
    // local full aar dependency, just build in flavor1
    flavor1Embed project(path: ':lib-aar-local', configuration: 'default')
    // local full aar dependency, just build in debug
    debugEmbed(name: 'lib-aar-local2', ext: 'aar')
    // remote jar dependency
    embed 'com.google.guava:guava:20.0'
    // remote aar dependency
    embed 'com.facebook.fresco:fresco:1.12.0'
    // don't want to embed in
    implementation('androidx.appcompat:appcompat:1.2.0')
}

(4)所有依赖产物都打包进入产出的aar中
这里就要在产出module的build.gradle文件中,声明如下:

fataar {
    transitive = true
}

同样,如果要忽略,就用exclude语法,和原来一致,示例如下:

embed('com.facebook.fresco:fresco:1.11.0') {
    // exclude any group or module
    exclude(group:'com.facebook.soloader', module:'soloader')
    // exclude all dependencies
    transitive = false
}

其中,可以看到,是用embed代替implementation的

后续打包步骤,和原生一致,这里就不再叙述了。

that’s all-------------------------------------------------------------

相关推荐

  1. 关于模块打包,aar,jar丢失问题

    2024-03-11 07:22:05       44 阅读
  2. flutter 打包自定义名字

    2024-03-11 07:22:05       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 07:22:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 07:22:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 07:22:05       82 阅读
  4. Python语言-面向对象

    2024-03-11 07:22:05       91 阅读

热门阅读

  1. react hook:useeffect

    2024-03-11 07:22:05       40 阅读
  2. 【洛谷千题详解】P1605 迷宫

    2024-03-11 07:22:05       44 阅读
  3. ETL策略

    2024-03-11 07:22:05       44 阅读
  4. Ubuntu安装部署Oracle-JDK11

    2024-03-11 07:22:05       50 阅读
  5. Android 获取Sms

    2024-03-11 07:22:05       37 阅读
  6. vue slot 仔细研究一下

    2024-03-11 07:22:05       44 阅读
  7. SpringBoot实现 PDF 添加水印

    2024-03-11 07:22:05       40 阅读
  8. N32L40x基于串口IAP实现(含升级工具)

    2024-03-11 07:22:05       45 阅读
  9. Go微服务: 基于Go Micro框架实现微服务调用

    2024-03-11 07:22:05       41 阅读