`
897371388
  • 浏览: 523515 次
文章分类
社区版块
存档分类
最新评论

Gradle 构建 android 应用常见问题解决指南

 
阅读更多

前言

android gradle 插件已经发展到0.5.7,同时gradle 本身也到了1.8,相比两个月前,android gradle 更快,更完善,也更好用了,为了让各位androider 早日用上gradle这样的神器,特地写一篇关于gradle一些奇葩错误的解决指南.

使用最新的gradle android插件

以前我们写的时候会这么写

dependencies {
    classpath 'com.android.tools.build:gradle:0.5.0'
}

不过,由于android gradle 插件的开发还是很活跃的,而且目前而言,可能还存在一些我们不知道的坑,但是,别人踩过,后边,官方修复,为了不踩坑,我建议android gradle 始终保持最新版本,写法如下:

dependencies {
    classpath 'com.android.tools.build:gradle:0.5+'
}

由于代码编码与编译环境编码不一致,导致构建失败

有时候,我们的代码使用utf-8 保存的,但是,进行gradle build 的环境是gbk这类的,这时候会包如下错误:

15: 错误: 编码GBK的不可映射字符

     * 鍑虹幇涓枃璇锋敞鎰?

这个时候我们就需要手动的设置编译时编码类型.

tasks.withType(Compile) {
    options.encoding = "UTF-8"
}
apply plugin: 'android'
android {}

android support v4 重复引用问题

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/Activ
ityCompatHoneycomb;
        at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:12
3)
        at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
        at com.android.dx.command.dexer.Main.processClass(Main.java:490)
        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
        at com.android.dx.command.dexer.Main.access$400(Main.java:67)
        at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpen
er.java:245)

出现这个问题的原因一般是由于我们这样的写法导致:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

某个相同的jar包,被复制到了build目录导致重复编译使编译时失败,

由于这个问题android support v4 出现的比较多,所以同类型的都归类为v4 问题吧.

要避免这个问题,我们尽量少使用依赖某个目录下所有包,毕竟android项目不想java web项目动不动就有好几十jar 包依赖.要修复这个v4,原理很简单,可以使用依赖maven的写法.

dependencies {
    compile 'com.android.support:support-v4:13.0.0'
}

打包后缺少*.so文件

用指定依赖包的方式打包,我们会发现,最终打包后的jar没有了*.so文件,这个时候,我们需要自定义一个tasks,写如下:

task copyNativeLibs(type: Copy) {
    from(new File('libs')) { include '**/*.so' }
    into new File(buildDir, 'native-libs')
}

tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniDir new File(buildDir, 'native-libs')
}

这样,在编译时,就会自动把libs目录下的**/*.so文件复制到apk里面了.

构建多渠道包

在最新版本的gradle 0.5.7 中,构建多渠道包比之前简单多了,在以前,你需要这么写:

android {
    buildTypes {
         hiapk {
             packageNameSuffix ".hiapk"
         }
         playstore {
             packageNameSuffix ".playstore"
        }
     }
    sourceSets {
        hiapk {
            manifest.srcFile 'hiapk/AndroidManifest.xml'
        }
        playstore {
            manifest.srcFile 'hiapk/AndroidManifest.xml'
        }
    }
}

要替换某个类型的文件需要自己手动写,渠道多了,这代码量是可想而知的多,在0.5.7中,进行了一个约定规则,构建,渠道包你只需

android {
    buildTypes {
         hiapk {
             packageNameSuffix ".hiapk"
         }
         playstore {
             packageNameSuffix ".playstore"
        }
     }
    sourceSets {
         hiapk.setRoot('build-types/hiapk')
         playstore.setRoot('build-types/playstore')
    }
}

在项目的根目录下创建一个build-types的目录,在创建对应渠道的子目录,然后把一些,诸如要替换AndroidManifest.xml,里面友盟渠道号什么的,直接把xml复制进去就行,gradle在构建项目的时候,会自动的优先使用build-types下目录文件的目录,诸如,根据不同渠道,不同国家换个程序图标什么的,都只要放到目录下即可.

作者:游戏阿柴
出处:http://www.cnblogs.com/youxilua

分享到:
评论

相关推荐

    Android Gradle 插件中文指南

    Android Studio使用Gradle构建工具,Eclipse的ADT插件使用的是Ant构建工具。因为两个构建工具的区别,导致习惯了Eclipse开发环境的开发者刚开始比较难适应Android Studio。如果要迁移到Android Studio,建议最好了解...

    Android中使用Gradle来构建App项目的入门指南

    gradle是Android开发中引入的全新的构建系统,因为全新的构建系统主要是出于下面的目的: 1. 方便复用代码和资源 2. 构建多种版本的apk更见简单,不论是为多渠道构建不同的apk还是构建不同环境的apk(debug,release...

    Android Studio使用指南

    基于Gradle 构建的支持。 Android专属的重构和快速修复。 捕获性能、易用性、版本兼容性等问题。 支持ProGuard 和应用签名。 基于模板的向导来创建常见的Android设计和组件。 丰富的布局编辑器,允许你拖放UI组件并...

    Android Studio入门指南

    基于Gradle的构建支持 Android 专属的重构和快速修复 提示工具以捕获性能、可用性、版本兼容性等问题 支持 ProGuard 和应用签名 基于模板的向导来生成常用的 Android 应用设计和组件 功能强大的布局编辑器,可以让你...

    基于Android平台的天气信息查询应用

    Android SDK:作为开发环境,提供了丰富的API和工具来构建Android应用。 Java/Kotlin:作为主要编程语言,用于编写应用的逻辑和用户界面。 Material Design:作为界面设计指南,确保应用界面的一致性和现代感。 ...

    GPP是Android的非官方发布自动化Gradle插件。 它可以执行任何操作,从构建,上传,然后升级您的App Bundle或APK到发布应用列表和其他元数据。-Android开发

    可让您从持续集成服务器或有命令的任何地方将APK和其他应用程序详细信息上传到Google Play商店l Gradle Play Publisher Gradle Play Publisher是Android的非官方发行自动化Gradle插入。 它可以执行任何操作,从构建...

    android-currency-converter:Android移动应用程序使用fixer.io执行货币换算

    从那里开始,遵循默认选项,它将从gradle构建文件中导入项目。构建和运行应用程序将项目导入Android Studio后,您将可以运行或调试该应用程序。 也可以从Android Studio中创建用于调试或生产的APK。 有关更多信息,...

    sunflower:一个园艺应用程序,说明了使用Android Jetpack进行Android开发的最佳做法

    Android向日葵 园艺应用程序,说明了使用...该项目使用Gradle构建系统。 要构建此项目,请使用gradlew build命令或在Android Studio中使用“导入项目”。 有两个用于测试项目的Gradle任务: connectedAndroidTest

    belajar-android

    本指南将引导您完成使用Gradle构建简单的Android项目的过程。 你会建立什么 您将为Android创建一个简单的Spring应用程序,然后使用Gradle进行构建。 你需要什么 约15分钟 最喜欢的文本编辑器或IDE 或更高版本 ...

    android-samples

    这些示例使用Gradle构建系统。 首先,通过克隆此存储库或下载存档的快照来下载样本。 (请参阅页面顶部的选项。) 在Android Studio中,使用“导入非Android Studio项目”或“导入项目”选项。 接下来

    iFixitAndroid:iFixit官方Android应用

    官方iFixit Android App v2.9.2 此应用是iFixit网站的本机Android版本,其中包括: 设备层次结构浏览设备的答案和指南列表指南视图查看和添加指南注释媒体管理器集成:查看和上传图像收藏夹,精选专辑和拆解指南列表...

    Android应用开发中CardView的初步使用指南

    引言 在Google I/O 2014上,Google公布了Android L Preview版本,此版本的UI有了非常大的改变,很炫很给力!同时,Google也给出了两个可以向下兼容的控件放到了V7包中,分别是...如果应用是以Gradle构建的,引

    airwallex-payment-android:Airwallex Android SDK

    dependencies { implementation ' com.airwallex:airwallex-core:2.0.3 '}入门指南在您的Android应用中集成Airwallex Android SDK的以及。回馈感谢您抽出宝贵的时间试用我们的示例代码,并欢迎您提供反馈。 以下是...

    android-samples:演示如何使用Android版Maps SDK的示例

    此示例演示了基于gradle的Android Studio项目所需的基本设置。 :与开发人员指南中的教程相关的示例。 请参阅每个样本以获取相关指南的链接。 : 找到的段 先决条件 请参阅每个样本以了解先决条件。 所有这些都...

    PenName:类似于Instagram社交媒体应用程序,能够以笔名发布

    Android向日葵 一个园艺应用程序,说明了使用...该项目使用Gradle构建系统。 要构建此项目,请使用gradlew build命令或在Android Studio中使用“导入项目”。 有两个用于测试项目的Gradle任务: connectedAndroid

    java屏幕截图工具源码-Chromium-Android:AndroidStudio的ChromiumAndroid浏览器源代码

    注意:如果构建有问题,请尝试在 Android Stuido 设置中关闭即时运行。 截图 源更新 如果您想更新 Chromium 源,这些步骤可能会有所帮助: , 要匹配我们的构建设置,请使用 使用官方指南为 Android Studio 生成文件...

    Android插件

    我们做项目的时候,并不是所有文 件都是要提交的,比如构建的build 文件夹,本地配置文件,每个Module 生成的iml 文件,但是我们每次add,commit 都会不小心把它们添加上去,而gitignore 就是解决这种痛点的,如果你...

    Github-Issue-Tracker:一个允许您查看存储库问题并与之交互的Android应用程序

    一个允许您查看和交互的Android应用程序使用GitHub的Graphql API和Apollo Client解决存储库问题。 我使用Apollo,它创建了客户端存根类来为我们提供类型安全的api操作。 Apollo在构建期间会基于.graphql文件和...

    DankMemes:用于搞笑图片(模因)的android社交媒体应用程序

    该应用程序主要用Kotlin编写,并使用Gradle构建系统。 它将用于后端,而提供其他服务器端功能。 您可以在库中查看功能代码,以及有关部署代码的指南。 您可以在以下Play商店下载该应用: 产品特点 100%Kotlin ...

Global site tag (gtag.js) - Google Analytics