详解android项目由Gradle 2.2 切换到 3.0的坑

问题1、运行的时候一直报如下错误

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForApiTestDebug'. 
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

查了很多资料,大概意识是引用重复的库或jar的问题。

然后一遍一遍的检查,发现并没有引用重复的jar包。

最后考虑是不是第三方库引用jar出现的问题,然后就一个一个排查第三方库,最后发现我们用支付用的是

compile 'com.pingxx:pingpp-alipay:2.1.9' // 使用支付宝时添加

发现这个库有些问题,竟然在里面引用两个版本的支付宝的jar包,果断的换了最新版本,检查了一个这次就引用了一个jar包。重新编译了一下项目,运行成功,问题解决了。

特别注意:引用第三方库在gralde3.0版本是更为严格,要特别注意。

问题2、

AAPT2

AAPT2 将默认启用,如果遇到离奇的问题,可以尝试禁用,只要在 gradle.properties 中加入:

android.enableAapt2=false

其他:

应用(app)目录下build.gradle(下面 implementation "com.android.support:design:25.4.0" 切换为 project的统一配置)

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'
   android {
    compileSdkVersion 25
    buildToolsVersion "26.0.2" 

    defaultConfig {
      multiDexEnabled true
      applicationId "com.example"
      minSdkVersion 21
      targetSdkVersion 23
      versionCode 1
      versionName "1.0" 

      renderscriptTargetApi 23
      renderscriptSupportModeEnabled true 

    }
    compileOptions {
      sourceCompatibility JavaVersion.VERSION_1_8
      targetCompatibility JavaVersion.VERSION_1_8
    }
    lintOptions {
      quiet true
      abortOnError false
      ignoreWarnings true
      disable 'InvalidPackage'      //Some libraries have issues with this.
      disable 'OldTargetApi'
      //Lint gives this warning but SDK 20 would be Android L Beta.
      disable 'IconDensities'      //For testing purpose. This is safe to remove.
      disable 'IconMissingDensityFolder' //For testing purpose. This is safe to remove.
    } 

    dexOptions {
      javaMaxHeapSize "8G"
    } 

    packagingOptions {
      exclude 'LICENSE.txt'
      exclude 'META-INF/DEPENDENCIES.txt'
      exclude 'META-INF/LICENSE.txt'
      exclude 'META-INF/NOTICE.txt'
      exclude 'META-INF/NOTICE'
      exclude 'META-INF/LICENSE'
      exclude 'META-INF/DEPENDENCIES'
      exclude 'META-INF/notice.txt'
      exclude 'META-INF/license.txt'
      exclude 'META-INF/dependencies.txt'
      exclude 'META-INF/rxjava.properties'
    } 

    sourceSets {
      main.java.srcDirs += 'build/generated/source/apt'
    }
  } 

  repositories {
    flatDir {
      dirs 'libs'
    }
  } 

  dependencies {
  implementation fileTree(dir: 'libs', include: ['*.jar'])
  implementation project(':library_api')
  implementation project(':library_base')
  implementation project(':library_blur_dialog')
  implementation project(':library_countrycodepicker_dialog')
  implementation project(':library_glow_decorator')
  implementation project(':library_icons')
  implementation project(':library_loopvideo')
  implementation project(':library_section_adaper')
  implementation project(':library_taptargetview')
  implementation project(':library_ucrop')
  implementation project(':library_utils')
  implementation project(':library_utils_picasso')
  implementation project(':library_vector_compat')
  implementation project(':library_view_clock')
  implementation project(':library_view_shimmer_recycler') 

  implementation "com.google.android.gms:play-services-cast-framework:11.4.2"
  compileOnly 'com.google.android.wearable:wearable:2.0.3'
  implementation 'com.google.android.support:wearable:2.0.3'
  implementation 'com.google.android.exoplayer:exoplayer:r2.4.1' 

  implementation "com.android.support:mediarouter-v7:25.4.0"
  implementation "com.android.support:leanback-v17:25.4.0"
  implementation "com.android.support:design:25.4.0" 

  implementation "com.android.support:appcompat-v7:25.4.0"
  implementation "com.android.support:support-v4:25.4.0"
  implementation "com.android.support:gridlayout-v7:25.4.0"
  implementation "com.android.support:cardview-v7:25.4.0"
  implementation "com.android.support:recyclerview-v7:25.4.0"
  implementation "com.android.support:preference-v14:25.4.0" 

  // rxjava
  implementation 'io.reactivex:rxjava:1.2.9'
  implementation 'io.reactivex:rxandroid:1.2.1'
  implementation 'com.github.davidmoten:rxjava-extras:0.8.0.6' 

  // square
  implementation "com.squareup.retrofit2:retrofit:2.1.0",
  implementation "com.squareup.retrofit2:converter-gson:2.1.0"
  implementation "com.squareup.retrofit2:adapter-rxjava:2.1.0"
  implementation "com.squareup.phrase:phrase:1.1.0" 

  implementation "com.squareup.okhttp3:okhttp:3.6.0"
  implementation "com.squareup.okhttp3:logging-interceptor:3.6.0"
  implementation "com.squareup.okhttp3:okhttp-urlconnection:3.6.0" 

  // picasso
  implementation "com.squareup.picasso:picasso:2.5.2"
  implementation 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0' 

  // dagger
  implementation "com.google.dagger:dagger:2.10"
  annotationProcessor "com.google.dagger:dagger-compiler:2.10"
  implementation "javax.annotation:jsr250-api:1.0"
  implementation "javax.inject:javax.inject:1" 

  // jake ftw
  implementation 'com.jakewharton:butterknife:8.8.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
  compileOnly 'org.projectlombok:lombok:1.16.16'
  annotationProcessor 'org.projectlombok:lombok:1.16.16'
  // FragmentWithArgs
  implementation  "com.hannesdorfmann.fragmentargs:annotation:3.0.2",
  annotationProcessor "com.hannesdorfmann.fragmentargs:processor:3.0.2",
  implementation "org.parceler:parceler-api:1.1.9",
  annotationProcessor "org.parceler:parceler:1.1.9",
  implementation 'com.hannesdorfmann.fragmentargs:bundler-parceler:3.0.2'
   implementation "com.github.codekidX:storage-chooser:1.0.34"
  implementation 'io.github.yavski:fab-speed-dial:1.0.6'
  implementation('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
    transitive = true;
  } 

  // intent builder
  implementation     "com.github.marcinmoskala.activitystarter:activitystarter:1.00"
  annotationProcessor "com.github.marcinmoskala.activitystarter:activitystarter-compiler:1.00"
  implementation 'com.android.support.constraint:constraint-layout:1.0.2'//constraint-layout
  implementation 'org.greenrobot:eventbus:3.0.0'
  //font
  implementation 'uk.co.chrisjenx:calligraphy:2.2.0'
  implementation 'com.github.florent37:expectanim:1.0.6'
  implementation 'com.romandanylyk:pageindicatorview:0.2.0@aar'
  implementation 'com.github.rubensousa:gravitysnaphelper:1.2'
  implementation 'com.flaviofaria:kenburnsview:1.0.7'
  implementation 'com.github.florent37:arclayout:1.0.2'
  implementation 'com.jakewharton.rxbinding:rxbinding:1.0.1'
  implementation 'com.wang.avi:library:2.1.3'
  implementation 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar'
  implementation 'com.borax12.materialdaterangepicker:library:1.9'
  implementation 'com.github.scottyab:showhidepasswordedittext:0.8'
  //Location
  implementation "com.google.android.gms:play-services-maps:11.4.2"
  implementation 'pl.charmas.android:android-reactive-location:0.10@aar'
  implementation "com.google.android.gms:play-services-location:11.4.2"
  //you can use newer GMS version if you need
  implementation "com.google.android.gms:play-services-places:11.4.2"
  implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar'
  implementation 'commons-validator:commons-validator:1.4.1'
  implementation 'com.balysv:material-ripple:1.0.2'
  implementation 'com.googlecode.libphonenumber:libphonenumber:8.5.2'
  implementation 'ru.egslava:MaskedEditText:1.0.5'
  implementation 'com.futuremind.recyclerfastscroll:fastscroll:0.2.5'
  implementation "com.google.firebase:firebase-core:11.4.2"
  implementation 'com.labo.kaji:swipeawaydialog:0.1.1'
  implementation 'io.supercharge:shimmerlayout:1.0.1'
  implementation 'hanks.xyz:htextview-library:0.1.5'
  implementation 'com.github.castorflex.smoothprogressbar:library:1.1.0'//progressbar for action bar
  implementation 'io.reactivex:rxjava-math:1.0.0'
  implementation 'jp.wasabeef:picasso-transformations:2.1.2'
  implementation 'com.afollestad.material-dialogs:core:0.9.1.0'
  implementation('com.github.ihsanbal:LoggingInterceptor:2.0.2') {
    exclude group: 'org.json', module: 'json'
  }
} 

项目(project)目录下build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules. 

buildscript {
  repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    maven {
      url 'https://maven.google.com/'
      name 'Google'
    }
    jcenter()
//    maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'
    classpath 'com.meituan.android.walle:plugin:1.1.1'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
  }
} 

allprojects {
  repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
//    maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
    maven { url "https://jitpack.io" }
    maven { url 'https://maven.google.com' }
    maven { url "https://dl.google.com/dl/android/maven2/"}
    jcenter()
    google()
  }
} 

task clean(type: Delete) {
  delete rootProject.buildDir
} 

ext {
  targetSdkVersion = 26
  minSdkVersion = 14
  compileSdk = 26
  buildTools = "26.0.2"
  junit = 'junit:junit:4.12'
  recyclerview = 'com.android.support:recyclerview-v7:26.0.2'
  appcompat = 'com.android.support:appcompat-v7:26.0.2'
  design = 'com.android.support:design:26.0.2'
  percent = 'com.android.support:percent:26.0.2'
  glide = 'com.github.bumptech.glide:glide:3.7.0'
  retrofit = 'com.squareup.retrofit:retrofit:1.9.0'
  gson = 'com.google.code.gson:gson:2.8.0'
  okhttp = 'com.squareup.okhttp3:okhttp:3.6.0'
//  converterGson = 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
//  converterJackson = 'com.squareup.retrofit:converter-jackson:1.9.0' 

  commonsio = 'commons-io:commons-io:2.4'
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • AndroidStudio 使用过程中出现的异常(Gradle sync failed)处理办法
  • 为Android Studio编写自定义Gradle插件的教程
  • Android Studio使用教程(五):Gradle命令详解和导入第三方包
  • Android Studio使用教程(四):Gradle基础
  • Gradle编译打包Android apk详细介绍
  • AndroidStudio更新出现Refreshing ''xxx'' Gradle Project状态解决办法
  • Android客户端程序Gradle如何打包
  • 详解Androidstudio3.0 关于Gradle报错的问题(小结)
  • android studio 3.0 gradle 打包脚本配置详解
(0)

相关推荐

  • 为Android Studio编写自定义Gradle插件的教程

    Google已经建议Android开发全部转向Android Studio开发,Android Studio 是使用gradle编译.打包的,那么问题来了,gradle可是有一堆东西...,为了彻底了解gradle,今天就来学习下如何写自己的gradle插件(当然插件源码是使用groovy写的),先看如下代码目录: 如上图所示,plugin目录是插件源码目录,sample是用来测试插件的. 1.在目录plugin/src/main/groovy/com/micky/gradle/下新建插件类My

  • Android Studio使用教程(五):Gradle命令详解和导入第三方包

    Android Studio + Gradle的组合用起来非常方便,很多第三方开源项目也早都迁移到了Studio,为此今天就来介绍下查看.编译并导入第三方开源项目的方法. Sublime + Terminal编译并查看源码 首先来给大家介绍一种简便并且个人最喜欢的一种办法.很多时候我们在GitHub上看到一个不错的开源项目,一般有两种需求,阅读源码和查看运行效果,如果是单纯的查看源码我更喜欢用一些轻量级编辑器,如vim,sublime等,vim不是很熟练,所以个人一种都习惯用sublime来查看

  • AndroidStudio更新出现Refreshing 'xxx' Gradle Project状态解决办法

    前言 开发项目之前,我用的是AndroidStuio2.1.0版本,项目开发完后,按耐不住就更新编译环境了.编译环境更新至AndroidStuio2.2.2. 更新完后,激动的打开AndroidStudio,原来的项目就处于如下状态: 本来以为这是更新后的正常情况,结果一直处于这种状态.然后搜索了一下网上,总结到一个简单方便的解决方法: 第一步: 关闭项目,进入AndroidStudio安装目录下的gradle文件夹中,查看新版本AndroidStudio的gradle版本,如下图: 复制上面的

  • AndroidStudio 使用过程中出现的异常(Gradle sync failed)处理办法

    AndroidStudio使用过程中出现的异常 异常信息: Gradle sync failed: Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used. Please refer to the user guide chapter on th

  • 详解Androidstudio3.0 关于Gradle报错的问题(小结)

    前言 升级Android Studio to 3.0 canary 1版本后,之前一个正常的Project,一直报错,报错内容如下 Error:Failed to complete Gradle execution. Cause: The version of Gradle you are using (3.3) does not support the forTasks() method on BuildActionExecuter. Support for this is available

  • Android Studio使用教程(四):Gradle基础

    其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了很多,所以暂且结合Stduio 1.0正式版与最新的Gradle语法来详细讲解下,小伙伴们直接跟我一步步来学习吧. 什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. 安装Gradle 在Android Studio系列教程一–下载与安装中新建项目成功后会下载Grad

  • Gradle编译打包Android apk详细介绍

    Gradle编译打包Android apk详细介绍 理解Gradle构建过程,解读Android Gradle插件的配置 阅读本文一定是要使用过Gradle生成apk,文中不会讲如何安装运行Gradle,如有需要可先看文末的参考文章. APK包是一个ZIP压缩包,从Java源代码.资源文件到生成这个APK,经过了编译打包一系列特定的过程,SDK文档(/docs/tools/building/index.html)中找到.而这一系列特定的过程,重复繁琐,构建工具(build tool)就是来流程化

  • Android客户端程序Gradle如何打包

    一.前言 android客户端开发进入尾声,负责SEO同事突然发给我一个涉及45个发布渠道的噩耗,之前只发布自有渠道的工作方式(手动修改参数打包)已经不满足需求,所以引入最近比较流行的gradle打包技术. gradle基于groovy语言,引入的原因也方便了以后从现在使用的eclipse开发环境迁移到Android Studio,所以blablabla--,不多说了,先上干货. 二.准备工作 1.首先,如果使用eclipse作为开发环境,需右键点击项目,在菜单中选择"Export-"

  • android studio 3.0 gradle 打包脚本配置详解

    本文介绍了android studio 3.0 gradle 打包脚本配置,分享给大家,具体如下: 修改输出的名字 保存输出的文件路径 def fileArray = [] //遍历输出文件 android.applicationVariants.all { variant -> variant.outputs.all { output -> def outputFile = output.outputFile if (outputFile != null && outputF

  • 详解android项目由Gradle 2.2 切换到 3.0的坑

    问题1.运行的时候一直报如下错误 Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForApiTestDebug'.  > java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 查了很多资料,大概意识是引用重复的库或jar的问题. 然

  • 详解Android项目多服务端接口适配(超简单)

    现状 Android项目如果是多服务端接口时,一般怎么弄呢? 方法1:服务器地址放在Header中 把服务器地址放在接口Header中,然后通过拦截器来动态修改请求地址而实现的.除了默认服务器的接口,其它都要加一个Header,有点麻烦.看起来也不爽,不简洁. interface ApiHeaderCase { /************************** server A ****************************/ @Headers("host:$SERVER_HOS

  • 详解Android用Shape制作单边框图的两种思路和坑

    开发中遇到单/多边框的UI,简单的可以自己写shape图,复杂的一般都让设计配合制作9patch图了. 今天不说需要切图的情况,只聊简单的单/多边框,主要是实现思路. 效果很简单: 就以上图为例介绍,只有上边框,边框红色.宽1dp,其余为白色. 思路一 两层画布叠加:底层红色:上层白色: 上层白色画布下移1dp. 代码实现: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:andro

  • 详解Android app自动更新总结(已适配9.0)

    1.配置: 1.1 AndroidManifest.xml中添加权限和FileProvider: <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name=&quo

  • 详解Android Studio正式签名进行调试的实现步骤

    详解Android Studio正式签名进行调试的实现步骤 在Android Studio中,可以使用Gradle进行打包时自动签名.其实Android Studio默认会给调试应用加上Debug签名,但有时候调一些第三方SDK时,需要正式签名才能调起来,所以接下来分享一下使用Gradle自动签名的方法. 一.创建签名文件 打开AS,选择Build->Generate Signed APK,选择要打包的项目,点击Next,再点击Create new...创建签名文件 填写签名文件响应信息,如下所

  • 详解Android studio如何导入jar包方法

    下面我就总结一下Android studio大家在导入jar包时遇到的一些问题和解决方法: 1,首先先说一下怎么在AS 中找到sdk,jdk,ndk的安装路径,可能一部分人一开始找不到,下面贴出方法: Android studio 中更改sdk的路径,如下图,在右边红色方框中更改sdk的路径 还有一种更好的方式可以把sdk,jdk,ndk的路径全部找到,首先File---Other Settings---Default Project Structure...,打开如下图界面,从红方框处即可直接

  • 详解Android Studio中Git的配置及协同开发

    一. Android Stutio配置git setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置,这个Stutio一般会默认配置好: 配置完路径后点击后面的Test按钮,出现下面提示框则表示配置成功: 二. 将项目分享到github 1. 设置github账号密码 打开Setting–>Version Control–>GitHub,填写完账号密码后,点击Test测试,如果连接成功会弹出如下提示

  • Android+OpenCV4.2.0环境配置详解(Android studio)

    仅是个人记录,希望能对有需要的给予一些小小的帮助 首先我们肯定是要去到OpenCV的官网下载对应的SDK,并解压得到文件夹(opencv-4.2.0-android-sdk) 其次是NDK环境搭建(双击shift,输入sdk,找到sdk manager,将下面红色框框勾选安装) 创建项目,我选用的是(并不是只有这一选择) 导入Module File->New->Import Module 路径选择**\opencv-4.2.0-android-sdk\OpenCV-android-sdk\sd

  • 详解Android性能优化之启动优化

    1.为什么要进行启动优化 网上流行一种说法,就是8秒定律,意思是说,如果用户在打开一个页面,在8秒的时间内还没有打开,那么用户大概的会放弃掉,意味着一个用户的流失.从这里就可以看出,启动优化的重要性了. 2.启动的分类 2.1 冷启动 先来看看冷启动的流程图 从图中可以看出,APP启动的过程是:ActivityManagerProxy 通过IPC来调用AMS(ActivityManagerService),AMS通过IPC启动一个APP进程,ApplicationThread通过反射来创建App

  • 详解android在mob平台实现qq登陆和分享

    个人感觉mob平台功能还是比较强大的,很多功能都可以通过他们平台来实现. 建议仔细观看每一个步骤,如果一个步骤没处理好,可能就会让你的这个功能无法实现.相信我一定可以成功的. 废话少说,先看一下效果: 1.在mob平台配置ShareSDK环境 1.如何在mob平台创建应用 下面为我创建的应用,如图所示,我们选择接入的接口为ShareSDK 2.获取你的App Key和App Secret(建议用自己的) 获取你先创建应用的App Key和App Secret,这里主要告诉你在哪里找App Key

随机推荐