编译方式gradle
⑴ Gradle--多环境编译打包
前段时间产品经理提了个需求,测试环境,预发布环境,生产环境编译下的app需要在同一步手机同时存在,实现是可以的,但是得有三个环境下的不同applicationId,网络地图key,域名,桌面logo,刚开始是想需要什么环境就换什么类型,很麻烦,每次都要换一次重新编译,我就在想有什么便捷的方法一键设置更换,gradle其中的Flavors功能可以实现我想要的。
这个是主项目中build.gradle中的配置,有三个环境我命名为 xiaoming_test,xiaoming_ready,xiaoming_proct,并有不同的applicationId,BAIDU_MAP_KEY,HTTP_HEAD,HTTP_HEAD_java,app_icon,(解释一下,有两条域名是因为后面后台是用java开发而做的区分),到这里应该大家有疑问,举个栗子,我们一般开发的第三方key是在mainifests进行注册申请的,而我们gradle如何去引用资源的。这里有两种引用方式,直接引用,自定义引用。
引用logo在application的icon属性命名为app_icon,$表示引用这个命名,对应的是gradle的配置。
在mainifests自定义为HTTP_HEAD,value值通过${HTTP_HEAD}引用,getHttpHead()获取自定义注册的域名值。从而实现每次请求对应的域名,只需在gradle里设置。
只需打开studio的BuildVariarts设置,选择需要的环境即可重新编译不同的apk,方便快捷的做到一键设置快速打包。
⑵ gradle可以编译android源码吗
方法/步骤
1
(可以省略)通过cmd命令行下载gradle源码:
git clone https://github.com/spring-guides/gs-gradle-android.git
2
下载最新的gradle安装包,地址:
http://gradle.org/downloads
点击下载二进制文件
3
解压到d盘,路径为:D:\gradle-2.4
4
打开“计算机”-“右键”-“属性”-“更改设置”-“高级”-“环境变量”,
在系统变量中,点击新建,属性名为GRADLE_HOME,属性值为"D:\gradle-2.4"
5
打开“计算机”-“右键”-“属性”-“更改设置”-“高级”-“环境变量”,
在系统变量中,找到Path,将";D:\gradle-2.4\bin"加入到Path中
6
打开cmd命令行,执行gradle,如果出现如图所示,则说明gradle安装成功
7
打开cmd命令行,进入android工程目录,找到build.gradle文件,在目录执行执行
gradle build
既可开始使用gradle打包apk,在成功后会在同目录生成build文件夹,
⑶ Gradle编译-APK编译过程
在早期的Android设备中(Android5.0以下)都是使用的Dalvik虚拟机,Dalvik支持经过转换的.dex文件。.dex格式是专为Dalvik设计的一种适合内存和处理器速度有限的系统。
但是在Android5.0,google用ART全面取代的Dalvik。Android7.0中又添加了JIT编译器,使得Android性能也有不少提升。
上图为从Android源文件开始,最终到APK的过程。
下面博客文章详细介绍了dalvik虚拟机,可供参考学习。
https://www.cnblogs.com/lao-liang/p/5111399.html
dvm(art)和jvm属于不同的虚拟机平台,不同平台要求执行的文件类型也就不一样
dvm(art)--.dex文件
jvm--.class文件
在编译和生成上
java source --.class文件 ---jvm执行
java source --.class文件 ---.dex文件 --- dvm执行
Android Runtime (ART) 是 Android 上的应用和部分系统服务使用的托管式运行时。ART 及其前身 Dalvik 最初是专为 Android 项目打造的。作为运行时的 ART 可执行 Dalvik 可执行文件并遵循 Dex 字节码规范。
ART 和 Dalvik 是运行 Dex 字节码的兼容运行时,因此针对 Dalvik 开发的应用也能在 ART 环境中运作。不过,Dalvik 采用的一些技术并不适用于 ART。
ART的功能
1.预先 (AOT) 编译
使用ART编译器时,应用程序在安装期间就已经把dex字节码翻译并存储在设备上,运行时,只需要执行这些翻译好的就可以了,因此执行速度也快了不少。
2.垃圾回收方面的优化
3.开发和调试方面的优化
构建流程涉及许多将项目转换成 Android 应用软件包 (APK) 的工具和流程。构建流程非常灵活,因此了解它的一些底层工作原理会很有帮助。
⑷ 怎么将已有的代码用gradle编译工具编译
1. 为什么选择Gradle?
2. 简单入门
2.1 使用Intellij Idea创建gradle项目
首先在Idea中启用Gradle支持:Settings->Plugins: Gradle
然后创建一个gradle项目或模块,会发现目录结构和maven的很像,其中build.gradle是gradle的配置文件,类似于maven中pom.xml文件,以下是build.gradle的简单示例:
apply plugin: 'java'
group = 'org.yousharp'
version = '1.0-SNAPSHOT'
sourceCompatibility = 1.7
targetCompatibility = 1.7
repositories {
mavenCentral()
maven { url "repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'com.google.guava', name: 'guava', version:'17.0'
compile group: 'redis.clients', name: 'jedis', version:'2.6.0'
testCompile group: 'junit', name: 'junit', version:'4.11'
}
插件(plugin):是gradle的一种扩展,gradle预定义了很多插件,常见的如java插件、war插件等;java插件中定义了一些有用的task,如编译源码、执行单元测试、生成jar包、约定默认的目录结构等; repositories定义仓库,dependencies定义项目的依赖,比maven的XML定义更简洁;
那么,如何编译、测试,以及运行gradle的项目呢?
刚才说到java插件预定义了很多task,其中就包括编译、测试、生成jar包等task,可以在命令行通过 $ gradle tasks 查看项目已定义的所有task以及含义,如java插件中常用的task有:
+ assemble: 编译
+ build:编译并执行测试
+ clean:删除build目录
+ jar: 生成jar包
+ test:执行单元测试
2.2 将Java项目从maven迁移到gradle
如何将一个java项目从maven迁移到gradle呢?gradle集成了一个很方便的插件:Build Init Plugin,使用这个插件可以很方便地创建一个新的gradle项目,或者将其它类型的项目转换为gradle项目。
要将maven项目转换为gradle项目,只需要在项目的pom文件所在的目录下执行以下命令:
$ gradle init --type pom
上面的命令会根据pom文件自动生成gradle项目所需的文件和配置,然后以gradle项目重新导入即可。
⑸ Android Studio开发解读 - gradle编译项目的build目录结构
转自:http://www.cnblogs.com/bbqzsl/p/5926591.html
本文针对android studio工具下的ndk开发。
build目录就是项目模块构建过程和结果使用到的位置。
项目根目录下有一个build目录。
项目根目录下各模块子目录下各自有一个build目录。
build目录下一般由4个子目录组成:
generated由aapt工具根据资源数据自动生成的java类
intermediates中间过程
outputs输出结果
tmp编译日志
根目录下的build目录,这个build服务于整个项目,在本文中称其做项目build,以区分模块build。
项目build一般只有generated和intermediates两个子目录,用于生成这个项目的buildTools。
generated目录会生成一个mockable-android-${buildToolsVersion}.jar。
intermediates目录根据需要生成dex-cache,这个目录纤谨下的xml文件配置jar包在编译过程中如何缓冲使用。
模块build目录在make mole ${MOD_NAME}后就会生成4个子目录。
我们来看intermediates目录,中间生成和编译过程使用到的目录。
这个目录下有这么几个比较关心的子目录:
binaries NDK,生成c++连接库
bundles 模块链接到的自定义毁樱基jar包和各abi版本的c++链接库都捆绑在这里
classes模块中生成的自定义java类
exploded-aar 由aar包解压出来的资源,jar包和so链接文件等。用于本模块的链接和集成。
jniLibs 在build.grade中你指定的jniLibs目录整个拷贝。模块链接到的库文件会被捆到bundles目录。
objectFiles NDK,生成c++中间对象(.o)文件。
transforms 根据你当前选择的proctFlavor和其包含的abiFilter,从bundles和binaries取出链接库。
接着就是output目录:
aar如果模块是android library
jar 如果模块是java library
apk 如果是Activity应用程序
最后就是tmp目录:
compile$(NDK_Mole)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)MainCpp ndk编译日志
link$(NDK_Mole)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)$(LIB_TYPE) ndk链接日志
编译的子目录由三要素组合颂磨而成,分别是
BUILD_TYPE := debug|release
ProctFlavor := 你在gradle文件中创建的flavor
abiFilter :=
逆向深入objc,c++ windows下仿objc动画层UI引擎