Eclipse + Gradle实现APK分包
为什么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分包相关推荐
- Google Play渠道超过100M?尝试APK分包,面试资料分享
``` /Android/obb/App包名/ ```所以,通过在/Android/obb/下创建\[app包名 如com.example.obbtest\]文件夹,并将obb文件复制到该目录下即可模 ...
- 使用gradle进行apk打包
本文转自:http://www.jayfeng.com/2015/11/07/Android/ 正文: Android打包的那些事 发表于 2015-11-07 使用gradle打包apk已经成为当 ...
- [Gradle系列]Gradle打包apk多版本,多渠道,多环境,多功能,多模块随心所欲
Tamic: http://blog.csdn.net/sk719887916/article/details/53411771 开始 上篇Gradle发布Module(Maven)到jcenter, ...
- 解读apk分包-32位安装包、32位64位兼容包和64位安装包
目录 1.apk为何要分包(32位安装包.32位64位兼容包和64位安装包)? 2.影响apk适配的cpu架构的因素-原生代码(C/C++代码) 3.如何判断apk支持的cpu架构? 3.1 查看ap ...
- 如何在Eclipse中构建APK文件?
当我使用Eclipse开发项目时, APK文件会在模拟器上运行. 但我想将我的应用程序上传到真实设备. 有没有工具来构建一个APK文件? 这个过程是什么? 或者是否可以从模拟器中提取APK文件? #1 ...
- android gradle 设置 output文件名,如何使用gradle在APK文件名中设置versionName?
我只需要在一个地方更改版本名称.代码也很简单. 下面的示例将创建一个名为MyCompany-MyAppName-1.4.8-debug.apk或 MyCompany-MyAppName-1.4.8-r ...
- Eclipse Gradle 构建多模块项目
注意: 1.Eclipse不如IDEA智能,Eclipse建立的Gradle Project项目在目录级别上是同级的; 2.user-web模块如果要引用user-service模块,直接引用是找不到 ...
- Android开发Android studio之gradle打包apk重命名的方法
老套路,先看效果图: 首先第一步在gradle里面(跟android同级)写个获取当前时间的方法如下: //获取时间的方法 GMT+8代表北京时间,下面两个方法都可以 static def getNo ...
- android 扫描重复文件,Android Gradle在APK META-INF中复制的重复文件
我尝试在我的Android应用程序中添加spring但应用程序不运行. 我真的不知道为什么我的跑步失败了.你能帮我解决这个问题,谢谢 这是我的app / build.gradle配置: apply p ...
最新文章
- 实现一个模拟CMD.exe命令编辑模式执行与显示的Delphi控件
- (C++)寻找1-100以内所有素数,复杂度为O(nsqrt(n))与O(nloglogn)的两种方法
- Smarty vs Twig: 性能对比
- 在linux下使用ZThread
- 为什么阿里巴巴禁止开发人员使用isSuccess作为变量名(修订版)
- SPT20 协议_协议离婚协议书模板锦集6篇
- 苹果电脑怎么投屏到电视_tcl电视怎么投屏
- java图片简单爬虫_[Java教程]使用jsoup进行简单的爬虫操作爬取图片
- Vue 3 最新进展
- 微软Skype推出Slack整合预览版
- LTE学习:传输块大小的计算
- 怎样查看域名DNS服务器的相一些关信息
- php5.4 mcrypt.so,PHP安装mcrypt.so报错 mcrypt.h not found 的解决方法
- 使用scroll实现Elasticsearch数据遍历和深度分页
- 脚本小子福利:安卓远控木马直接生成
- Qt6安装教程——国内源
- Android之ViewStub的简单使用
- ubuntu系统给u盘拷贝文件
- mac格式化固态为exFAT格式
- Java--制作乱字游戏
热门文章
- ZOJ 1013 Great Equipment(DP)
- gjrand 4.0 发布,C语言的伪随机数生成器
- 2005毕业生薪酬预测女超男
- PHP Composer 新漏洞可引发大规模供应链攻击
- CVE-2020-11945 Squid未授权整数溢出分析
- 账户体系、支付服务设计第一版
- 纠正存储 dict 的元素前是计算 key 的 hash 值?
- JAVA读取、写入Excel表格(含03版)
- 完美解决:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求...
- C3P0连接池配置方式