一个bug 一个脚印的叫你们用gradle。

1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了

2介于网上都是粘贴复制并且零碎我很蛋疼啊,走了很多歪路才弄出来,所以我弄一个完全完整的版本

3我不但会写gradle还会写ant打包方式,希望能帮到大家

在这之前你需要有一个android工程(工程中不能有已经过时的方法)

可以没有eclipse或者ADT 因为只要你工程是ok的 gradle就可以直接用

后面我会越说越详细 前面都太简单了 但是还是要从头说起撒

上一篇的链接

http://www.cnblogs.com/uncle2000/p/4276833.html

工程:单个应用的所有文件的根目录就叫工程

下面就是我的“xxx工程”

配置完了gradle 接下来就是代码里的配置  这一篇先讲个简单的,下一篇讲复杂的:用gradle 签名 混淆 加依赖工程 关于依赖工程如何配置如:appcompat_v7_6这种依赖工程而不仅仅是依赖jar

1新建一个或者启用一个工程(工程名为字母,不要用汉字),保证工程里没有错误代码,没有已过时的代码(就是被划中划线的代码)既然是国内,那么工程的编码格式默认是“utf-8”。

2在你的工程的根目录下新建文件命名为“build.gradle”,以文本形式打开 输入内容(你先别管我的内容适用不适用,你先照猫画虎的粘贴复制,我后面会讲)

最初始的代码是这样的

  1. //gradle的配置
  2. buildscript {
  3. //仓库 基本不会变的 如果你也是用eclipse开发 你不必理解它是什么意思,你就把他当做调用一个外部代码的引用即可
  4. repositories {
  5. mavenCentral()
  6. }
  7. //gradle自身依赖的包(注意不是你工程依赖的包!!!)
  8. dependencies {
  9. classpath 'com.android.tools.build:gradle:1.0.0'
  10. }
  11. }
  12. //普通工程写'android' .jar包工程写'android-library'
  13. apply plugin: 'android'
  14. //!!!这是你工程所依赖包的声明的地方(注意这个方法并不是在buildscript内哟)
  15. dependencies {
  16. }
  17. //工程的配置
  18. android {
  19. }

我是从简单到难来写的,所以一步一步来,

关于代码中的

  1. //gradle自身依赖的包(注意不是你工程依赖的包!!!)
  2. dependencies {
  3. classpath 'com.android.tools.build:gradle:1.0.0'
  4. }
  1. gradle的版本号为什么是1.0.0 ?还记得上篇文章中让大家记住的那个2.2.1么?没错, gradle2.2.1对应的classpath所依赖的包的版本就是1.0.0 后面还有一个对应马上就讲到
    所以这段代码只适用于2.2.1gradle 是适用于2015年,若多年后 肯定不适用了,那么对于 gradle这个功能的版本和所它所依赖的版本是如何一一对应的呢?网上基本没人讲,而讲的都是让去看api,但是我说实话,那些个网址打不开,因为是goole被屏蔽了,所以我看不到api,我也不知道是如何一一对应的,这是我摸索出来的一个结果。
  2. 下面上一部分片码,先不要着急的加,因为gradle“域”的概念一开始把我搞的到处都是bug
  1. //使得gradle不会把你的代码中的中文注释搞乱
    //特别注意 参数是JavaCompile 而不是Compile 很多老版本的gradle和android studio 的教程里面用的都是没有加java的 坑爹啊!
  2. tasks.withType(JavaCompile) { options.encoding = "UTF-8" }
  1. //工程的引用
  2. dependencies {
  3. //compile是编译的意思是个动词
  4. //fileTree表示一堆文件
  5. //dir:你要“编译”“一堆文件”的地址/盘符是什么,这里我们要把工程下的“libs”目录下的所有.jar一同编译了,并且libs是属于工程的子目录
  6. //*.jar表示所有.jar结尾的文件,如果有.so库写法相同 (又一个子文件夹下的就这么写 '**/*.so')
  7. compile fileTree(dir: 'libs', include: '*.jar')
  8. }
  1. //你的这个工程的sdk的版本 别说你不知道= =
  2. compileSdkVersion 19
  3. //这就是 那个2.2.1对应1.0.0且再对应19.1.0的最后一处,
  4. buildToolsVersion "19.1.0"
  5. //默认false 什么意思我也不知道
  6. enforceUniquePackageName=false
  7. //默认配置 其实都不用写的,这个里面的东西和manifest中的意思是一样的
  8. defaultConfig {
  9. targetSdkVersion 19
  10. }

上面切忌注意  如果你和我一样 下载的是  gradle2.2.1  那么classpath 后面必须跟1.0.0 这里的buildToolsVersion必须是 19.1.0

  1. sourceSets {
  2. //可以指定每种文件的存储路径 这是标配
  3. main {
  4. manifest.srcFile 'AndroidManifest.xml'
  5. java.srcDirs = ['src']
  6. resources.srcDirs = ['src']
  7. aidl.srcDirs = ['src']
  8. renderscript.srcDirs = ['src']
  9. res.srcDirs = ['res']
  10. assets.srcDirs = ['assets']
  11. }
  12. }

下面再把代码集合到一起(还不完整哟~)

  1. buildscript {
  2.  
  3. repositories {
  4. mavenCentral()
  5. }
  6.  
  7. dependencies {
  8. classpath 'com.android.tools.build:gradle:1.0.0'
  9. }
  10.  
  11. tasks.withType(JavaCompile) { options.encoding = "UTF-8" }
  12. }
  13.  
  14. apply plugin: 'android'
  15.  
  16. dependencies {
  17. compile fileTree(dir: 'libs', include: '*.jar')
  18. }
  19.  
  20. android {
  21.  
  22. compileSdkVersion 19
  23. buildToolsVersion "19.1.0"
  24. enforceUniquePackageName=false
  25.  
  26. defaultConfig {
  27. targetSdkVersion 19
  28. }
  29.  
  30. sourceSets {
  31. main {
  32. manifest.srcFile 'AndroidManifest.xml'
  33. java.srcDirs = ['src']
  34. resources.srcDirs = ['src']
  35. aidl.srcDirs = ['src']
  36. renderscript.srcDirs = ['src']
  37. res.srcDirs = ['res']
  38. assets.srcDirs = ['assets']
  39. }
  40.  
  41. }
  42. }

如果出现了以下错误,是说明了没有找到你sdk的地址。

sdk location not found.define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

有两种方法解决

1:配置android_home 具体自己百度

2:在根目录下新建一个文件  “local.properties”  内容“sdk.dir=D:\\android\\SDK\\sdk”注意是你存放sdk的根目录,这里是我的sdk的地址,是双杠

如果出现了以下错误

9-path image xxxxxxxxx.png malformed.

must have one-pixel frame that is either transparent or white.

这是因为你的xxxxx.9.png格式的图片并不是真正的xxxx.9.png格式,删除中间的.9变成 xxxx.png

如果你必须要用.9.png格式 那么你要注意它的制作方法。因为gradle的检查是非常严谨的,你的文件头部信息所写的文件类型是A,但是你的文件的后缀却是B,当然不通过了

  1. 如果出现了以下错误 gradle全是乱码 则记得加前面那句话,自己看前面有写,并且工程要是utf-8编码方式哟
    关于方法的域 我这篇文章的最后说一下


  1. 如果出现了下面这种错误
    could not find property 'Compile' on root project 'xxxxxx'
    这个我前面说过 老版本的gradle的参数才是Compile 新版本的是 JavaCompile 将你文件中所有的tasks.withType(Compile)变成tasks.withType(JavaCompile)

  1.  
  2. 如果出现了下面这种错误
    could not find method runProguard() for .......
    意思是你文件中的runProguard是老版本的 讲你文件中的那个方法改成:
  1. //混淆方法 对应工程根目录下的混淆文件proguard-properties.txt
  2. proguardFile getDefaultProguardFile('proguard-properties.txt')
  1. 如果是
  2. could not find method buildscript()
    如果是这个方法没有被找到 那么
    首先检查你文件中的所有的“{”和“}”是否是一一对应的 是否域错误
    其次就是当你执行 gradle build
    你的build.gradle文件的打开方式改变 比如默认为文本打开而没法改回去 比如默认为xml打开 因为gradle的打开方式是null 可是系统附上了一个打开方式 尤其是win7不能直接返回默认
    导致执行 gradle build 或许发生了一些类似于转码错误而产生了没有找到完整的字符 此时 打开cmd 输入"assoc .gradle = " 注意有2个空格 等号后的空格代表赋值null 这样可以使.gralde文件的打开方式为空。然后应该就没有问题了,再不行重启一下。我反正解决了这个问题

如果是下面这个问题  java.lang.StackOverflowError 这种错误(说实话我不知道我是如何解决的,我跟的网上做结果不行,但是突然就好了)我吧网上的在这里再写一遍

首先 删除C:\Users\Administrator\.gradle  这个.gradle文件夹(一开始gradle下载的2.2.1的文件)

再删除 %GRADLE_HOME%/bin 下的.gradle文件夹(如果没有就算了)

然后点击%GRADLE_HOME%/bin 下的gradle.bat 运行一下 再 gradle build让它重新下载2.2.1的相关文件 不行就再重装一遍gradle 再不行就重启

关于域的概念大家肯定都晓得

  1. A{
  2.  
  3. }
  4.  
  5. BBBBBBB=***
  6.  
  7. C{
  8.  
  9. }

那么gradle要小心的就是不要把域写错了,一定要把域的归属写对,否则出了错误你会很蛋疼 下面是一个简化的例子

  1. //buildscript域
  2. buildscript {
  3. //buildscript.repositories 域
  4. repositories {
  5. }
  6. //buildscript.dependencies域
  7. dependencies {
  8. }
  9. }
  10.  
  11. apply plugin: 'android'
  12.  
  13. //dependencies域
  14. dependencies {
  15. }
  16.  
  17. //android 域
  18. android {
  19. }

在比如一个例子  方法的执行和域的关系,在这里,一个域就是一个方法。

  1. productFlavors {
  2. no1{ }
  3. no1{ }
  4. //注意这个all方法现在在productFlavors 域内
  5. all {}
  6. }

上面的这段代码和下面这段代码完全相等

  1. productFlavors {
  2. no1{ }
  3. no1{ }
  4. }
  5.  
  6. //注意这个all方法现在不在productFlavors 域内,但是却和上面的方法块等价
  7. productFlavors.all {}

这第二篇就讲些简单的和一些我遇到的错误

下一篇讲 用gradle 签名 混淆 加依赖工程

gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第二篇:gradle简单实战的更多相关文章

  1. 如何将Eclipse中的项目迁移到Android Studio 中

    如何将Eclipse中的项目迁移到Android Studio 中 如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的 ...

  2. [转]-如何将Eclipse中的项目迁移到Android Studio 中

    英文地址:http://developer.android.com/sdk/installing/migrate.html 翻译:Android Studio 中文组(大锤译) 如果你之前有用Ecli ...

  3. studio--如何将Eclipse中的项目迁移到Android Studio 中

    如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的是生成Build Gradle的文件.因为Android Studi ...

  4. 如何将Eclipse中的项目迁移到Android Studio中

    如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的是生成Build Gradle的文件.因为Android Studi ...

  5. Android studio启动后卡在refreshing gradle project(包解决)

    这个问题几乎每个刚使用Android studio的同学都会碰到过,网上有各式各样的方法,有的说使用本地gradle,我试过多次,每次启动android studio时还是会检查更新,所以根本上解决的 ...

  6. IDEA插件(Android Studio插件)开发示例代码及bug解决

    IDEA插件(Android Studio插件)开发示例代码及bug解决 代码在actionPerformed方法中,有个AnActionEvent e 插件开发就是要求我们复写上述的这个方法即可,在 ...

  7. Android studio启动后卡在refreshing gradle project

    这个问题几乎每个刚使用Android studio的同学都会碰到过,网上有各式各样的方法,有的说使用本地gradle,我试过多次,每次启动Android studio时还是会检查更新,所以根本上解决的 ...

  8. Android Studio 使用笔记:记录使用Gradle配置AndroidAnnotations

    系统:Mac Yosemit 10.10 JDK:1.6+ Android Studio:1.2 原来看到有人用AndroidAnnotations,十分羡慕.但是Gradle并不熟悉,现找到了正确的 ...

  9. Android Studio一直显示Building“project name”Gradle project info问题详解

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号  欢迎大家关注我的微信公众号:「醉翁猫咪」 Android Studio一直显示 Building&quo ...

随机推荐

  1. Bracket 使用指南

    Brackets 是一个免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具).该项目由Adobe 创建和维护,根据MIT许可证发布,支持 Windo ...

  2. javascript中ajax的四大步骤

    原生js中ajax写法一: function ajaxys(){ //1. 创建xhr对象 var xhr = new XMLHttpRequest();//XMLHttpRequest() // 2 ...

  3. 一段用c#操作datatable的代码

    using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ...

  4. javascript中new Date()的浏览器兼容性问题

    正确的做法: var time1 = (timestart+' 00:00:00').toString(); var time2 = (timeend+' 23:59:59').toString(); ...

  5. GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!【转】

    作者 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 近日,一个在 GitHub 上开源即收获了 3700+ Star 的项目,引起了营长的注意.据介绍,该项目以 TensorFlow ...

  6. Convolutional Neural Networks: Application

    Andrew Ng deeplearning courese-4:Convolutional Neural Network Convolutional Neural Networks: Step by ...

  7. Android Studio下加入百度地图的使用(二)——定位服务

    上一章(http://www.cnblogs.com/jerehedu/p/4891216.html)中我们已经完成了环境的搭建,这一章我们来研究一下如何使用. 第一步:在xml文件中加入以下权限 & ...

  8. JSON.parse 必须用双引号包起来

    Why is it that whenever I do :- JSON.parse('"something"') it just parses fine but when I d ...

  9. 微软BI 之SSIS 系列 - XML Task 中XSLT 样式表转换错误记录

    开篇介绍 此文章专门记录 XSLT 样式表转换过程中的语法问题 错误一 值与属性的倒置 修改了几次样式表,但还是一如既往的报错,报错信息如下: [XML Task] Error: An error o ...

  10. Window下对nodejs多版本管理GNVM

    Windows下对nodejs多版本的管理,实现随意切换! 官方地址: https://github.com/Kenshin/gnvm http://ksria.com/gnvm/ 01.下载GNVM ...