为什么80%的码农都做不了架构师?>>>   

Eclipse + Gradle 实现APK分包

一、环境搭建

1、解压Gradle(gradle-2.2.1-all.zip)并配置环境变量:

配置好环境变量后,打开命令行,输入gradle -version查看如下:

2、Eclipse安装Gradle离线插件:

解压后,把features和plugins目录下的文件分别复制到Eclipse安装路径下对应的features和plugins两个目录下,然后重启Eclipse即可

二、生成工程配置文件

右键需要打包的工程-->Export-->Android-->Generate Gradle build files

勾选需要生成配置文件的工程:

说明:在工程的父目录下会生成两个文件,build.gradle和settings.gradle

在build.gradle中,需要更换gradle版本号,如下图所示:

settings.gradle的内容是将要打包的主工程和依赖工程

三、修改主工程的编译配置文件build.gradle

主工程的完整配置文件如下:

buildscript {

// buildscript中的声明是gradle脚本自身需要使用的资源。

//可以声明的资源包括依赖项、第三方插件、maven仓库地址等

repositories {

mavenCentral()

}

dependencies {

classpath 'com.android.tools.build:gradle:0.14.+'

}

}

apply plugin: 'android'

dependencies {

// 编译所依赖的第三方jar包

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

// 编译依赖工程

compile project(':txtw_green_one_lib')

}

android {

compileSdkVersion 21

buildToolsVersion "23.0.2"

dexOptions {

// 对于dex 的--multi-dex 选项设置与预编译的library工程有冲突,如果你的应 // // 用中包含引用的lirary工程,需要将预编译设置为false:

preDexLibraries = false

}

defaultConfig {

// Enabling multidex support.

multiDexEnabled true

}

sourceSets {

main {

manifest.srcFile 'AndroidManifest.xml'

// 打包依赖的so库文件

jniLibs.srcDirs = ['libs']

java.srcDirs = ['src']

resources.srcDirs = ['src']

aidl.srcDirs = ['src']

renderscript.srcDirs = ['src']

res.srcDirs = ['res']

assets.srcDirs = ['assets']

}

// Move the tests to tests/java, tests/res, etc...

instrumentTest.setRoot('tests')

// Move the build types to build-types/<type>

// For instance, build-types/debug/java,

//build-types/debug/AndroidManifest.xml, ...

// This moves them out of them default location under src/<type>/...

//which would

// conflict with src/ being used by the main source set.

// Adding new build types or product flavors should be accompanied by a // similar customization.

debug.setRoot('build-types/debug')

release.setRoot('build-types/release')

}

lintOptions {

abortOnError false

}

signingConfigs {

myConfig {

//签名所在路径,可以是相对路径,也可以是绝对路径

storeFile file("E:\\sign\\lwtx_zxk_keystore.keystore")

storePassword "xxx"

keyAlias “xxx”

keyPassword "xxx"

}

}

buildTypes{

release {

//minifyEnabled false表示工程打包时,不进行混淆

minifyEnabled false

//混淆配置文件

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'

// 签名配置

signingConfig  signingConfigs.myConfig

}

}

// 分包参数配置

afterEvaluate {

tasks.matching {

it.name.startsWith('dex')

}.each {

dx -> if (dx.additionalParameters == null)

{

dx.additionalParameters = ['--multi-dex']

}else {

dx.additionalParameters += '--multi-dex'

}

}

}

}

依赖工程的完整配置文件如下:

apply plugin: 'android-library'

dependencies {

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

}

android {

compileSdkVersion 19

buildToolsVersion "18.0.1"

sourceSets {

main {

manifest.srcFile 'AndroidManifest.xml'

// 打包依赖的so库文件

jniLibs.srcDirs = ['libs']

java.srcDirs = ['src']

resources.srcDirs = ['src']

aidl.srcDirs = ['src']

renderscript.srcDirs = ['src']

res.srcDirs = ['res']

assets.srcDirs = ['assets']

}

// Move the tests to tests/java, tests/res, etc...

instrumentTest.setRoot('tests')

// Move the build types to build-types/<type>

// For instance, build-types/debug/java, //build-types/debug/AndroidManifest.xml, ...

// This moves them out of them default location under src/<type>/... which would

// conflict with src/ being used by the main source set.

// Adding new build types or product flavors should be accompanied

// by a similar customization.

debug.setRoot('build-types/debug')

release.setRoot('build-types/release')

}

}

三、配置multidex

3.1 首先需要打开Android SDK Manager查看Android Support Repository 和 Android Support Library的版本为23以上;升级后,就可以得到:

3.2 为主工程引入android-support-multidex.jar包:

注意:不能直接把这个jar放到项目的libs目录下,而是需要通过以下操作步骤引用:

3.3 如果工程有自定义的Application,则在自定义的Application中覆写attachBaseContext方法,然后实现如下:

如果项目中没有自定义的Application,则需要在AndroidManifest.xml中声明MultiDexApplication。

四、开始编译工程

打开命令行窗口:

cd到主工程所在目录,并输入gradle build --info

说明: --info是让输出编译过程的详细信息,方便查看编译进度和出错信息。第一次编译需下载编译环境所依赖的各种pom文件和jar包,时间会稍长。

顺利的话,最终会看到BUILD SUCCESS,恭喜你,编译成功。

回到Eclipse,刷新主工程,可以看到生成了一个目录build,其中ouptup/apk目录下是最终编译生成的各个版本的APK:

五、可能遇到的问题:

1、提示非法字符,这是由于编码UTF-8 BOM ( Byte Order Mark ) 引起的,需要把UTF-BOM转成UTF-8:

使用以下这个工具可以批量去除BOM编码:BomChecker.zip

2、gradle编译过程中,由于多包多渠道打包,很可能发生OOM异常,这时候,可以修改参数,加大Gradle使用的JVM内存:在项目根目录下的gradle/wrapper/gradle-wrapper.properties中增加如下参数:

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError

3、为避免OOM,也可以选择性打包,可以单独打包Debug版本或者Release版本:

Release版本的命令是:gradlew aR(注:aR是assembleRelease的简称)

Debug版本的命令是:gradlew assembleDebug

4、为避免OOM,可在主工程的build.gradle配置文件下增加:

dexOptions {

incremental true

javaMaxHeapSize "4g"

}

转载于:https://my.oschina.net/kbgcs/blog/593846

Eclipse + Gradle实现APK分包相关推荐

  1. Google Play渠道超过100M?尝试APK分包,面试资料分享

    ``` /Android/obb/App包名/ ```所以,通过在/Android/obb/下创建\[app包名 如com.example.obbtest\]文件夹,并将obb文件复制到该目录下即可模 ...

  2. 使用gradle进行apk打包

    本文转自:http://www.jayfeng.com/2015/11/07/Android/ 正文: Android打包的那些事 发表于 2015-11-07  使用gradle打包apk已经成为当 ...

  3. [Gradle系列]Gradle打包apk多版本,多渠道,多环境,多功能,多模块随心所欲

    Tamic: http://blog.csdn.net/sk719887916/article/details/53411771 开始 上篇Gradle发布Module(Maven)到jcenter, ...

  4. 解读apk分包-32位安装包、32位64位兼容包和64位安装包

    目录 1.apk为何要分包(32位安装包.32位64位兼容包和64位安装包)? 2.影响apk适配的cpu架构的因素-原生代码(C/C++代码) 3.如何判断apk支持的cpu架构? 3.1 查看ap ...

  5. 如何在Eclipse中构建APK文件?

    当我使用Eclipse开发项目时, APK文件会在模拟器上运行. 但我想将我的应用程序上传到真实设备. 有没有工具来构建一个APK文件? 这个过程是什么? 或者是否可以从模拟器中提取APK文件? #1 ...

  6. android gradle 设置 output文件名,如何使用gradle在APK文件名中设置versionName?

    我只需要在一个地方更改版本名称.代码也很简单. 下面的示例将创建一个名为MyCompany-MyAppName-1.4.8-debug.apk或 MyCompany-MyAppName-1.4.8-r ...

  7. Eclipse Gradle 构建多模块项目

    注意: 1.Eclipse不如IDEA智能,Eclipse建立的Gradle Project项目在目录级别上是同级的; 2.user-web模块如果要引用user-service模块,直接引用是找不到 ...

  8. Android开发Android studio之gradle打包apk重命名的方法

    老套路,先看效果图: 首先第一步在gradle里面(跟android同级)写个获取当前时间的方法如下: //获取时间的方法 GMT+8代表北京时间,下面两个方法都可以 static def getNo ...

  9. android 扫描重复文件,Android Gradle在APK META-INF中复制的重复文件

    我尝试在我的Android应用程序中添加spring但应用程序不运行. 我真的不知道为什么我的跑步失败了.你能帮我解决这个问题,谢谢 这是我的app / build.gradle配置: apply p ...

最新文章

  1. 实现一个模拟CMD.exe命令编辑模式执行与显示的Delphi控件
  2. (C++)寻找1-100以内所有素数,复杂度为O(nsqrt(n))与O(nloglogn)的两种方法
  3. Smarty vs Twig: 性能对比
  4. 在linux下使用ZThread
  5. 为什么阿里巴巴禁止开发人员使用isSuccess作为变量名(修订版)
  6. SPT20 协议_协议离婚协议书模板锦集6篇
  7. 苹果电脑怎么投屏到电视_tcl电视怎么投屏
  8. java图片简单爬虫_[Java教程]使用jsoup进行简单的爬虫操作爬取图片
  9. Vue 3 最新进展
  10. 微软Skype推出Slack整合预览版
  11. LTE学习:传输块大小的计算
  12. 怎样查看域名DNS服务器的相一些关信息
  13. php5.4 mcrypt.so,PHP安装mcrypt.so报错 mcrypt.h not found 的解决方法
  14. 使用scroll实现Elasticsearch数据遍历和深度分页
  15. 脚本小子福利:安卓远控木马直接生成
  16. Qt6安装教程——国内源
  17. Android之ViewStub的简单使用
  18. ubuntu系统给u盘拷贝文件
  19. mac格式化固态为exFAT格式
  20. Java--制作乱字游戏

热门文章

  1. ZOJ 1013 Great Equipment(DP)
  2. gjrand 4.0 发布,C语言的伪随机数生成器
  3. 2005毕业生薪酬预测女超男
  4. PHP Composer 新漏洞可引发大规模供应链攻击
  5. CVE-2020-11945 Squid未授权整数溢出分析
  6. 账户体系、支付服务设计第一版
  7. 纠正存储 dict 的元素前是计算 key 的 hash 值?
  8. JAVA读取、写入Excel表格(含03版)
  9. 完美解决:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求...
  10. C3P0连接池配置方式