Showing posts with label Gradle. Show all posts
Showing posts with label Gradle. Show all posts

Tuesday, August 2, 2016

Gradle build_lifecycle

https://docs.gradle.org/current/userguide/build_lifecycle.html


Android studio app:  

build.grade 是如何执行?

下面 并不是 Gradle 执行周期,仅仅是脚本的初始化的时候,把所有的设置加载了一遍!

Monday, July 25, 2016

Android gradle 每次切换分支和同步第三方代码的时候 特别的缓慢?


最近,发现同步第三方依赖库的时候,太慢了! 我今天花了2个小时的时间同步第三方的依赖库。  平时开发我可以使用  offline 的方式来处理这种问题。 

但是,当我每次修改 依赖的时候,要同步依赖库,我不可能花费同样的时间来做这件事情,因为如果急着发包的话,你觉得老板会等你2个小时吗?

肯定不行,

今天,我查看了一下 

log  日志:



看到日志的时候,我发现,每一次同步代码的时候,都会去下载一次 .deal/libraries  下面的 保存了 所有依赖库的信息 如图:



.gitignore   file




解决方案:

在 .gitignore 删除 /.ideal   .ideal/libraries





之后清除一下 git 的缓存信息

git rm -r -f --cached ./

git add .

git push


这样子就可以了。



但是,我尝试了一下 在  不是 离线的状态下的   同步第三方依赖库, 她会自动的把 .ideal/libraries 所有的 信息删除了。 这也许是 AS 同步的策略吧!

同步,是为了 解决 依赖库版本修改的 问题。 这里,As  无法判断修改了那些 依赖库,索性直接删除了所有的依赖库的关联信息。 重新关联, 这个在网速好的情况下 没什么问题。但是,在网络很差的公司,比如我们公司 就是很蛋疼的问题。我也是醉了!


网络这个东西。 我已经跟老大反映了很长时间了。没有好的网速 做什么开发呀?

不吐槽了!












Wednesday, May 25, 2016

Error:Unrecognized SSL message, plaintext connection?





Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:388)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.gradle.internal.resource.transport.http.HttpClientHelper.performHttpRequest(HttpClientHelper.java:102)
at org.gradle.internal.resource.transport.http.HttpClientHelper.executeGetOrHead(HttpClientHelper.java:79)
at org.gradle.internal.resource.transport.http.HttpClientHelper.performRequest(HttpClientHelper.java:70)
... 136 more



2016-05-25 17:11:17,633 [2153106]   WARN - radle.project.ProjectSetUpTask -
2016-05-25 17:11:17,633 [2153106]   INFO - radle.project.ProjectSetUpTask - Unrecognized SSL message, plaintext connection?

Consult IDE log for more details (Help | Show Log)
2016-05-25 17:11:17,633 [2153106]   INFO - ls.idea.gradle.GradleSyncState - Sync with Gradle for project 'AvengerAgent' failed: Unrecognized SSL message, plaintext connection?



解决方案:


Maybe the  gradle version  has somequesiton:

I use  gradle-2.11-all.zip  have this question

So I use this:



distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-rc-1-all.zip


OK















Tuesday, May 17, 2016

CentOS how to install Artifactory and Config Artifactory?

第一步:
如何在 Centos 上安装 Artifactory

1 download  Artifactory.zip

mkdir /home/tool/artifactory


cd this path, you use following command

wget --output-document=artifactory-4.4.1.zip "http://bit.ly/Hqv9aj"

---------------------------- 2016-09-14 ----------------------------

FAQ:
之前 这个源http://bit.ly/Hqv9aj是没有问题的。
但是,现在是无法获取的数据的,可能是那个哥们的服务器换地址了。那个建议你去下载一个 到你的本地。


下面教你如何将本地的文件上传到 Centos VPS

进入你下载的文件的目录里面 使用bash

scp fileName root@ip:[port]/home/root/tool/artifactory

OK, 接下里你就而已使用下面的命令了!

---------------------------- 2016-09-14 ----------------------------
mkdir artifactory


unzip artifactory-4.4.1.zip  -d artifactory

cd artifactory 
cd tomcat/conf

vim server.conf

You can do nothings. If you want to change port or else, you can
change the data!

you can find  artifactory/bin
cd bin

just input this command:
./installService.sh


Now we just change config information.


cd /etc/opt/jfrog/artifactory
vim default


you can see the path is right. If it is right you do nothings to it.
if you find wrong, just alter it for right!


Now  start Artifactory:

when I use this command, I meet this error:


# sudo service artifactory start




error info:
no java
Starting Artifactory tomcat as user artifactory...
Max number of open files: 32000
Using ARTIFACTORY_HOME: /home/tool/artifactory/artifactory/artifactory-oss-4.7.7
Using ARTIFACTORY_PID: /home/tool/artifactory/artifactory/artifactory-oss-4.7.7/run/artifactory.pid
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

** ERROR: Artifactory Tomcat server did not start. Please check the logs


I forget to config Java.
So I install java and config JAVA_HOME

yum install java
it will download the java it is so fast!

Now we config JAVA_HOME

cd ~
vim .bash_profile
add this string like this:

$JAVA_HOME=/use/lib/java-1.8.0
export $JAVA_HOME

and use this command:
source .bash_profile.

Ok , you can visit your VPS Artifactory!

just in the Browser, input  
IP:8081

Because it is first login, So it so slowly, you wait one minutes, you can get you want like this:


account:  admin
password:  password

this is default,  when you login in ,you can change it!



第二步:
如何将自己的代码发布到Artifactory

Now Our VPS has Artifactory, We can publish our code to Artifactory Repo.

工作原理,讲你的library 项目打包成 .aar 文件,让后将你的项目上传到 私有的Artifactory 项目中。
当你用的时候,只需要关联一下你的私有服务器的地址,导入你想使用的jar 包,即可!
个人感觉,仓库简直是开源世界的地位,就像是 git 的价值一样! 个人非常的庆幸,最先接触的是Android!

下面,我们开始创建的自己私有的 第三方库


Artifactory 是管理 Maven仓库的工具
为什么使用Artifactory?

  1. 清晰且有吸引力的用户界面
  2. 超快速配置
  3. Gradle插件
  4. 用户访问控制
  5. 自由和开放来源


你先 创建一个新的项目

  这个项目就是你要封装的私有的插件库代码。

在project 下的 build.grade

like this:


// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        //2  artifactory (制定版本)        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }
}

allprojects {
    repositories {
        //1  自己私有服务器的依赖库  (如果你用本地的可以不用写的)        maven { url "IP/artifactory/libs-release-local" }
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir}

然后,到你的 module的 (也就是 app目录下面的)build.gradle

在文件的顶部如下配置:

我们将需要两个新的插件:
一个准备Maven artifact maven-publish,
另一个上传archives到artifactory com.jfrog.artifactory:


apply plugin: 'com.android.library'apply plugin: 'com.jfrog.artifactory'apply plugin: 'maven-publish'

每一个Maven artifact都由以下三个参数确定:
* artifactId:库的名称
* groupId:通常库的包名
* version:区别同一artifact的不同版本

一般的,我们将在build.gradle文件顶部定义这两个变量(便于修改!)
def packageName = 'com.chow.ui'def libraryVersion = '1.0.2-release'

artifactId需要和assemblerelease任务输出的文件名相匹配。因此我们要重命名库模块或指定输出文件名。我个人比较喜欢第一种方法,可以通过下面这种方式得到artifactId:

一般可以自己定义,可以使用 project.getName()


如何发布呢?
我们需要配置  maven-publish

我们需要配置 Maven-publish,  这样就知道哪一个artifactory 将要发布到的Artifactory.
我们引用和使用的时候,应用的是 ***-release.aar 文件,他是有 assembleRelease 任务生成。请注意,我们可以通过更改 库项目的名称来修改这个名字!是可以自己配置的。


个人建议,如果不是稳定的版本,建议使用debug 作为后缀包名。 如果版本比较的稳定了,使用release 作为后缀包名!

publishing {
    publications {
        aar(MavenPublication) {
            groupId packageName
            version = libraryVersion
            artifactId project.getName()

            // Tell maven to prepare the generated "* .aar" file for publishing
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
      }
    }
}

最后: 
    我们需要配置 com.jorg.artifactory 插件, 来指定 artifactory 发布到那个 仓库的管理器(因为,你可能使用本地的仓库,你也可以使用不同的服务器的地址,自己指定)。
配置如下:


artifactory {
    contextUrl = 'IP//artifactory'    publish {
        repository {
            // The Artifactory repository key to publish to            repoKey = libraryVersion.endsWith('SNAPSHOT') ? 'libs-snapshot-local' : 'libs-release-local'
            username = artifactory_username            password = artifactory_password        }
        defaults {
            // Tell the Artifactory Plugin which artifacts should be published to Artifactory.            publications('aar')
            publishArtifacts = true
            // Properties to be attached to the published artifacts.            properties = ['qa.level': 'basic', 'dev.team': 'core']
            // Publish generated POM files to Artifactory (true by default)            publishPom = true        }
    }
}


注意:这里的
username = artifactory_username
password = artifactory_password

artifactory_username 
artifactory_password
这两个字段在  gradle.propertice  中
就是你登录 Artifactory的 用户名和密码,注意你的用户的权限奥.上传一般没什么问题!



最后一步;  部署 Artifactory

就一句命令行,很简单的。
gradle assembleRelease artifactoryPublish

如果在你的 服务器上看到:



恭喜你,成功了~





我们的私有的第三方的库,已经弄好了。下面,我们来看看怎么使用呢?

只需要两步:

在项目的 build.gradle
allprojects {
    repositories {
        maven { url "http://localhost:8081/artifactory/libs-release-local" }
    }
}

在 module   build.grade
dependencies {
    compile 'com.jeroenmols.awesomelibrary:1.0.0'
}

compile    包名:项目名:版本号码


     大功告成,现在你可以做自己的私有的服务器仓库了。哈哈。屌屌的,很开心,终于可以开始自己愉快的玩耍了。刚开始接触的时候,我并不了解Artifactory. 而且搞了几周,各种资源不足,那个时候的我,只是搭载了一个本地的。 因为没有自己的服务器,尽管搭好了Artiactory. 但是,不会用Gradle将项目上传到 Artifactory  Maven 仓库,也是白费。
   后来,我有了一些资本。自己的VPS, 更深的了解了,Gradle!
我发现了,当你遇到一个不懂的技术的时候,一定要去搞。不要害怕,一开始,你不可能完全的弄明白。但是,你只要搞了,你就会了解的更多,在此来接触的时候,你就有可能搞明白了!就是这个样子!
  我们只是对自己的无知,感到恐惧!



Thanks To:
http://geekhades.blogspot.com/2016/05/cents-how-to-install-artifactory.html



http://blog.strive-ltd.com/2016/03/308-install-artifactory-on-centos-7/



30分钟搭建一个android的私有Maven仓库






FAQ:
1  因为我的VPS使用了SSH认证,因为SSH  对于权限的问题比较敏感

如果,
当你使用:sudo service artifactory start
你遇到这种问题的时候:


你可以进图 artifactory/Tomcat dir  自己手动的开启 startup.sh  shutdown.sh


2  还有,你在卸载的时候,你可能忘记把Tomcat给Stop掉。

没有使用  sudo service artifactory stop

这个时候,当你使用 sudo service artifactory stop
是有问题的。因为Tomcat  PID 是错的,所以无法调用Tomcat stop.













Tuesday, May 10, 2016

Android Gradle 如何配置打包的时候,不同的APP打出不同的 名字?

昨天,在打包的时候,因为,配置的versionCode  有问题,所以在安装的时候,很多人,都安装不了?

因为,我现在在同时管理3个APP, 但是其中有一个APP的versionCode 不一致,在打包的时候,我忘记了更换了?所以,导致了VersionCode 有问题。

今天,搞了搞 解决了这个问题:

多个版本的解决方案:
productFlavors

但是,在打包的时候,之前写的是

def appendVersionNameVersionCode(variant,defaultConfig) {
    variant.outputs.each { output ->
        def outputFile = output.outputFile
        if(outputFile != null && outputFile.name.endsWith('.apk')){
            def currentType = "${variant.buildType.name}"
            def DEBUG_FLAG = project.APP_IS_DEBUG
            if(currentType == DEBUG_FLAG){
                def fileName = "${variant.productFlavors[0].name}_${variant.buildType.name}_V${defaultConfig.versionName}_${debugTime()}.apk"
                output.outputFile = new File(outputFile.parent, fileName)
            }else{
                def fileName = "${variant.productFlavors[0].name}_${variant.buildType.name}_V${defaultConfig.versionName}_${releaseTime()}.apk"
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }
}

之前使用的是 defaultConfig,

解决方案:
将 defaultConfig 替换成: variant.productFlavors[0].versionName

OK 






Thursday, April 28, 2016

Android 热修复技术

遇到的问题:

为什么只需要将:
adb push app/build/outputs/nuwa/debug/patch.jar /sdcard/

为什么只需要将patch.jar 发布到 sdcard
重新启动app,Bug Fix。   重启的时候,是如何加载的呢?不知道为什么。谁可以为我解答!?

经验点:

1、生成patch,jar,也就是把修改的地方打包成patch.jar(这里的jar不是普通的jar,而是dex的jar);

2、将patch.jar的dex文件放在其他的分dex文件之前。

不错的链接:
https://github.com/supengchao/NuwaDemo/issues/1






Android 是如Compile
http://www.infoq.com/cn/articles/ctrip-android-dynamic-loading





技术点:


HotFix
https://zhuanlan.zhihu.com/p/20308548

DemO;
How to use Nuwa implement Hotfix?
http://www.jianshu.com/p/72c17fb76f21
Demo:
https://github.com/archmages/HotFixSamples




热修复:
http://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a&scene=0#wechat_redirect


android dex分包方案
https://m.oschina.net/blog/308583
简单的概括一下,就是把多个dex文件塞入到app的classloader之中,但是android dex拆包方案中的类是没有重复的,如果classes.dex和classes1.dex中有重复的类
multidex方案实现。然后在插入数组的时候,把补丁包插入到最前面去。

 we realized that we could work around this problem by breaking our app into multiple dex files, using the technique described here 
http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html
It catch me that:  The Dalvik VM provides facilities for developers to perform custom class loading. Instead of loading Dalvik executable (“dex”) files from the default location, an application can load them from alternative locations such as internal storage or over the network.




Build system:
Apk how to create , You can see this link, I think you just see the image  you can
see it.
http://developer.android.com/sdk/installing/studio-build.html






热修复原理介绍:
http://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a&scene=0#wechat_redirect








Nuwa:



感谢:

    刘强 昨天,他跟我提到 热修复技术。我之前从来没有听说到的技术,感觉非常的牛逼,不过,其实 真的是很牛逼!


    JasonRoss
    github:   https://github.com/jasonross


Tuesday, April 19, 2016

Android gradle 如何在打包的时候 动态的添加 debug

buildTypes {

    debug {
        applicationIdSuffix project.APP_IS_DEBUG        multiDexEnabled true        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }


}





Thanks to
http://www.jayfeng.com/2015/11/07/Android打包的那些事/

Monday, April 11, 2016

Ubuntu how add gradle to PATH

Step-by-step instructions
Gradle is a Java build system. It uses a clean, simple configuration syntax and is used by Android as the default build system. For API development, Gradle is supported by Spring.
Installation is quick and simple. We are going to install a private copy so that root permissions are not required during development.

Download Gradle

mkdir -p ~/opt/packages/gradle && cd $_

wget https://services.gradle.org/distributions/gradle-2.3-bin.zip

unzip gradle-2.3-bin.zip

Install and setup Gradle

Next, we will create a symlink that provides a shorter path to the specific Gradle version. The symlink will allow us to upgrade Gradle later without changing any other configuration.
ln -s ~/opt/packages/gradle/gradle-2.3/ ~/opt/gradle
Open your .profile file in vi, emacs, or gedit.
gedit ~/.profile
Paste the following at the bottom of your .profile file.
# Gradle
if [ -d "$HOME/opt/gradle" ]; then
    export GRADLE_HOME="$HOME/opt/gradle"
    PATH="$PATH:$GRADLE_HOME/bin"
fi
Finally, source your .profile and test gradle.
source ~/.profile

which gradle

gradle -version
Congratulations, you now have a working Gradle installation.




THanks to:
http://exponential.io/blog/2015/03/30/install-gradle-on-ubuntu-linux/

ubuntu how to install gradle

sudo add-apt-repository ppa:cwchien/gradle
sudo apt-get update
sudo apt-get install gradle

Tuesday, January 19, 2016

Error:Execution failed for task ':app:createAnzhiDebugMainDexClassList'. > com.android.ide.common.internal.LoggedErrorException: Failed to run command: java -Xmx1024M -cp

Android studio  gradle  run the program

erro info:

Error:Execution failed for task ':app:createAnzhiDebugMainDexClassList'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
  java -Xmx1024M -cp /Users/Hades/Library/Android/sdk/build-tools/21.1.2/lib/dx.jar com.android.multidex.ClassReferenceListBuilder /Users/Hades/Work/Code/RentAgentNew/RentAgent/app/build/intermediates/multi-dex/anzhi/debug/componentClasses.jar /Users/Hades/Work/Code/RentAgentNew/RentAgent/app/build/intermediates/multi-dex/anzhi/debug/allclasses.jar
  Error Code:
  1
  Output:
  Unable to locate a Java Runtime to invoke.


Resolve Method:

you can in the gradle command line input this command:

Mac
./gradlew --stop

Windows
gradle --stop
or
gradlew --stop

It works for me!

Thursday, November 12, 2015

Android gradle build: java.io.IOException: The same input jar /app/libs/zxing.jar] is specified twice

Android gradle  build:     java.io.IOException: The same input jar     /app/libs/zxing.jar] is specified twice


Don't use -libraryjars or -injar or -oujar in your proguard file


reference:

http://stackoverflow.com/questions/29343214/android-proguard-same-jar-specified-twice

Android 代码混淆 海天盛筵


代码混淆:


http://blog.csdn.net/fengyuzhengfan/article/details/43876197

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'
文件中的 app, extras: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/

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

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


Sunday, October 25, 2015

Android studio 快速开发的插件介绍

Android studio  Gradle   deveplor  必备的plugon :




1  快速生成组件的 插件

    compile 'com.jakewharton:butterknife:7.0.1'//inject 

2   picasso  image loader 
    compile 'com.squareup.picasso:picasso:2.5.2'

3   httpclient get data utils

    compile 'com.squareup.okhttp:okhttp:2.5.0'



new info will add on...

please to wait!  thank you very much!