Thursday, November 12, 2015

Android gradle 海天盛筵


1 Android  Module的概念
http://stormzhang.com/devtools/2014/11/28/android-studio-tutorial2/

1、Studio中有Project和Module的概念,前面说到Studio中一个窗口只能有一个项目,即Project,代表一个workspace,但是一个Project可以包含多个Module,比如你项目引用的Android Library, Java Library等,这些都可以看做是一个Module;

2、上述目录中将java代码和资源文件(图片、布局文件等)全部归结为src,在src目录下有一个main的分组,同时划分出java和res两个文件夹,java文件夹则相当于Eclipse下的src文件夹,res目录结构则一样.



============ ========== ========== ========== ========== ==========


2. 9GAG/settings.gradle

这个文件是全局的项目配置文件,里面主要声明一些需要加入gradle的module,我们来看看9GAG该文件的内容:
include ':app', ':extras:ShimmerAndroid'
文件中的 appextras:ShimmerAndroid 都是module,如果还有其他module都需要按照如上格式加进去。


============ ========== ========== ========== ========== ==========

 3  Gradle  command  常用命令
http://stormzhang.com/devtools/2015/01/05/android-studio-tutorial5/

1、切换到 项目的根目录,执行 ./gradlew -v 来查看下项目所用的Gradle版本

terminal: error info
./gradlew: Permission denied

reslove:
chmod +x gradlew

2、接着执行 ./gradlew clean
执行这个命令会去下载Gradle的一些依赖,下载成功并编译通过

3、最后执行 ./gradlew build
这个命令会直接编译并生成相应的apk文件,如果看到如下字样就代表build成功了

总结:
./gradlew -v    检查gradlew  检查版本 一次就可以了
./gradlew clean  检查项目的依赖, 主要是扫描 settings.gradle   build.gradle dependences
依赖包
./gradlew build  构建项目的任务

Gradle常用命令
上面大家接触了一些命令如 ./gradlew -v ./gradlew clean ./gradlew build, 这里注意是./gradlew, ./代表当前目录,gradlew代表 gradle wrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper, 在9GAG/gradle/wrapper/gralde-wrapper.properties文件中声明了它指向的目录和版本。只要下载成功即可用grdlew wrapper的命令代替全局的gradle命令。

理解了gradle wrapper的概念,下面一些常用命令也就容易理解了。

./gradlew -v       版本号
./gradlew clean 清除 项目名字/app目录下的build文件夹
./gradlew build 检查依赖并编译打包

这里注意的是 ./gradlew build 命令把debug、release环境的包都打出来,如果正式发布只需要打Release的包,该怎么办呢,下面介绍一个很有用的命令 **assemble**, 如

./gradlew assembleDebug 编译并打Debug包
./gradlew assembleRelease 编译并打Release的包

除此之外,assemble还可以和productFlavors结合使用,具体在下一篇多渠道打包进一步解释。

./gradlew installRelease Release模式打包并安装
./gradlew uninstallRelease 卸载Release模式包


============ ========== ========== ========== ========== ==========

4  Gradle多渠道打包
多渠道打包的问题,相比我不说大家也应该知道的,很是蛋疼 的问题,我在上家公司的时候,我使用的是Eclipse + ANT 打包,过程是非常的痛苦的问题。蛋疼呀,而且打包的过程中报错的问题也是非常的难以找到。 所以我建议使用Android + gradle 打包, 简单方便。中国有多少市场? 少说也有几百多吧。但是真正有用的也就只有那么是十几个,可是运营并不会这没想的。 往常打个包需要2分钟,如果一个一个的打包是很蛋疼的。配置了gradle 是非常方便!

十几分钟 二十几个包吧!
下面让我们一起来:

友盟多渠道打包


Android studio 打包会存放在:
\app\build\outputs\apk

查看Key SSH  Keytool:

如果你照着上面的博客写的话:
会遇到下面的问题:




Could not find method releaseTime() for arguments [] on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@50fe0eed.


因为我们没有在 Gradle 写 releaseTime() 之后的代码就识别了,  去掉 releaseTime()  就OK了。

但是这个时候我们只能打印 debug 的包:
打包的Command:


assemble结合Build Variants来创建task
上一篇博客介绍了 assemble 这个命令,会结合 Build Type 创建自己的task,如:

./gradlew assembleDebug

./gradlew assembleRelease

除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor , 举个例子大家就明白了:

如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:

./gradlew assembleWandoujiaRelease
如果我们只打wandoujia渠道版本,则:

./gradlew assembleWandoujia
此命令会生成wandoujia渠道的Release和Debug版本

同理我想打全部Release版本:

./gradlew assembleRelease
这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

总之,assemble 命令创建task有如下用法:

**assemble**: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。

**assemble**: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。

**assemble**: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。





============ ========== ========== ========== ========== ==========

5  代码混淆之道

下面开始我们的代码混淆:

如何进行代码的混淆呢?
代码的混淆prugard  可以 压缩我们代码,减小包的大小, 优化我们的代码,最主要的代码混淆,保护我们的智慧的财产。不让别人不劳而获!
http://developer.android.com/tools/help/proguard.html


Umeng:




============ ========== ========== ========== ========== ==========


reference:

1  Gradle基础
http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/

2  Android studio info
http://stormzhang.com/devtools/2014/11/28/android-studio-tutorial2/

3  http://stormzhang.com/devtools/2015/01/05/android-studio-tutorial5/

http://stackoverflow.com/questions/17668265/gradlew-permission-denied

http://developer.android.com/tools/help/proguard.html


No comments:

Post a Comment