uni-app打包报错Caused by: com.android.tools.r8.errors.CompilationError: Program type already present:

Caused by: com.android.builder.multidex.D8MainDexList$MainDexListException: com.android.tools.r8.errors.CompilationError: Program type already present: ...

1.前言

  • 最近在做uni-app打包集成android插件总是报上面的错误,在Android studio上运行就是可以的。这里做一个总结避免再次掉坑。也希望能帮到在看的你。

2.问题描述点

  • 从编译上就可以看出,很明显是编译时某一个文件冲突了,冲突的地方就是省略号类的路径。这里描述出现的几种情况。
    2.1.和前端代码类名重合
    • 之前对一个类名叫App.java,我自己打包测试是正常的,但集成到前端做插件报错提示这个类有误,原因是前端也有起相同的名字,结果冲突了。
    2.2.插件前端替换有误
    路径
    • Android提供插件给前端aar包是不可少的,放在什么路径就不多说了,截图如上,之前给前端的aar名字不叫plugin-release,前端是采用替换的方法,名字不一样自然不会替换,而是有两个aar文件,虽然名字不同但内容大部分是一样的,这就导致了两个aar内部的有文件名称相同起了冲突。前端在替换的时候最好是将nativeplugins下的相关插件包内容全部删掉再拷贝进来
    2.3.项目依赖问题(最易发生)
    • 先上几张图,后面解释:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      AndroidStudio的module下的build.gradle文件内dependencies节点下的依赖方式有compileOnly,implementation,api三种,解释如下:

      compileOnly:只在编译时有效,不会参与打包
      implementation:所依赖的库不会传递,只会在当前module中生效。
      api:该依赖方式会传递所依赖的库,当其他module依赖了该module时,可以使用该module下使用api依赖的库。

    • 1.uni-app的package.json文件夹内的dependencies需要添加Android的build.gradle指定的依赖,不指定好像也行,不过官方文档上说需要,但像v4,v7包的这些默认已经集成,所以不用写。

    • 2.如果用到了ndk,也需要在package.json内指定一下abis节点

    • 3.在AndroidManifest.xml下用到的权限也需要在package.json的permissions节点下指定

    • 4.所有的aar文件都必须放到Android目录下,如果在Android studio的libs目录下有aar文件,注意移出来。

    • package.json内配置不太清楚的,这里附上uni-app官方package.json配置详解

最后

  • 这个出现这个错误通常都是依赖重复了,报的错误提示也比较详细。但你知道,uni-app打包次数每天是有限制的,而且打包也比较耗时。所以最好还是在一开始就注意一下各个依赖的问题。
  • 如果有什么疑问,下面留言。或有不足的也欢迎指正~

开通了个公众号,扫码关注一下,可以及时收到我分享的内容哦!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值