gradle教程 [原創](eclipse/ADT下 非插件 非Android Studio/AS)純手打 第二篇:gradle簡單實戰


一個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”,以文本形式打開 輸入內容(你先別管我的內容適用不適用,你先照貓畫虎的粘貼復制,我后面會講)

最初始的代碼是這樣的

//gradle的配置
buildscript {
    //倉庫 基本不會變的 如果你也是用eclipse開發 你不必理解它是什么意思,你就把他當做調用一個外部代碼的引用即可
    repositories {
        mavenCentral()
    }
    //gradle自身依賴的包(注意不是你工程依賴的包!!!)
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}
//普通工程寫'android'     .jar包工程寫'android-library'
apply plugin: 'android'
//!!!這是你工程所依賴包的聲明的地方(注意這個方法並不是在buildscript內喲)
dependencies {
}
//工程的配置
android {
}

我是從簡單到難來寫的,所以一步一步來,

關於代碼中的

//gradle自身依賴的包(注意不是你工程依賴的包!!!)
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
gradle的版本號為什么是1.0.0 ?還記得上篇文章中讓大家記住的那個2.2.1么?沒錯, gradle的2.2.1對應的classpath所依賴的包的版本就是1.0.0 后面還有一個對應馬上就講到
所以這段代碼只適用於2.2.1的gradle 是適用於2015年,若多年后 肯定不適用了,那么對於 gradle這個功能的版本和所它所依賴的版本是如何一一對應的呢?網上基本沒人講,而講的都是讓去看api,但是我說實話,那些個網址打不開,因為是goole被屏蔽了,所以我看不到api,我也不知道是如何一一對應的,這是我摸索出來的一個結果。

下面上一部分片碼,先不要着急的加,因為gradle“域”的概念一開始把我搞的到處都是bug

//使得gradle不會把你的代碼中的中文注釋搞亂
//特別注意 參數是JavaCompile 而不是Compile 很多老版本的gradle和android studio 的教程里面用的都是沒有加java的 坑爹啊!
tasks.withType(JavaCompile) { options.encoding = "UTF-8" }
//工程的引用
dependencies {
        //compile是編譯的意思是個動詞
        //fileTree表示一堆文件
        //dir:你要“編譯”“一堆文件”的地址/盤符是什么,這里我們要把工程下的“libs”目錄下的所有.jar一同編譯了,並且libs是屬於工程的子目錄
        //*.jar表示所有.jar結尾的文件,如果有.so庫寫法相同 (又一個子文件夾下的就這么寫  '**/*.so')
        compile fileTree(dir: 'libs', include: '*.jar')
}
    //你的這個工程的sdk的版本 別說你不知道= =
    compileSdkVersion 19
    //這就是 那個2.2.1對應1.0.0且再對應19.1.0的最后一處,
    buildToolsVersion "19.1.0"
    //默認false 什么意思我也不知道
    enforceUniquePackageName=false
    //默認配置 其實都不用寫的,這個里面的東西和manifest中的意思是一樣的
    defaultConfig {
        targetSdkVersion 19
    }

上面切忌注意  如果你和我一樣 下載的是  gradle2.2.1  那么classpath 后面必須跟1.0.0 這里的buildToolsVersion必須是 19.1.0

sourceSets {
        //可以指定每種文件的存儲路徑 這是標配
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }

下面再把代碼集合到一起(還不完整喲~)

buildscript {

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
    
    tasks.withType(JavaCompile) { options.encoding = "UTF-8" }
}

apply plugin: 'android'

dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
}

android {

    compileSdkVersion 19
    buildToolsVersion "19.1.0"
    enforceUniquePackageName=false

    defaultConfig {
        targetSdkVersion 19
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
        
    }
}

 

如果出現了以下錯誤,是說明了沒有找到你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,當然不通過了



如果出現了以下錯誤 gradle全是亂碼 則記得加前面那句話,自己看前面有寫,並且工程要是utf-8編碼方式喲
關於方法的域 我這篇文章的最后說一下


如果出現了下面這種錯誤
could not find property 'Compile' on root project 'xxxxxx'
這個我前面說過 老版本的gradle的參數才是Compile 新版本的是 JavaCompile 將你文件中所有的tasks.withType(Compile)變成tasks.withType(JavaCompile)



如果出現了下面這種錯誤
could not find method runProguard() for .......
意思是你文件中的runProguard是老版本的 講你文件中的那個方法改成:
//混淆方法 對應工程根目錄下的混淆文件proguard-properties.txt
proguardFile getDefaultProguardFile('proguard-properties.txt')
如果是

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 再不行就重啟

 

 關於域的概念大家肯定都曉得

A{

}

BBBBBBB=***

C{

}

那么gradle要小心的就是不要把域寫錯了,一定要把域的歸屬寫對,否則出了錯誤你會很蛋疼 下面是一個簡化的例子

//buildscript域
buildscript {
//buildscript.repositories 域
    repositories {
    }
//buildscript.dependencies域
    dependencies {
    }
}

apply plugin: 'android'

//dependencies域
dependencies {
}

//android 域
android {
}

在比如一個例子  方法的執行和域的關系,在這里,一個域就是一個方法。

 productFlavors {
    no1{ }
    no1{ }
//注意這個all方法現在在productFlavors 域內
    all {}
 }

上面的這段代碼和下面這段代碼完全相等

 productFlavors {
    no1{ }
    no1{ }
 }

//注意這個all方法現在不在productFlavors 域內,但是卻和上面的方法塊等價
 productFlavors.all {}

 

這第二篇就講些簡單的和一些我遇到的錯誤

下一篇講 用gradle 簽名 混淆 加依賴工程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM