編輯:關於Android編程
Gradle,這個東西好復雜,不過在Android中,我們知道它大概怎麼用,它的依據何來,就夠了。
Android Studio 建立project,可在其下建立多個moudle。
一個project自動生成一個build.gradle,每個module下也自動生成一個build.gradle (本文主要討論module中的build.gradle構建)
module/build.gradle:
apply plugin: 'com.android.application' //啟用android 應用插件
android {
compileSdkVersion 22
buildToolsVersion 22.0.1
defaultConfig {
applicationId com.stone.testbuild
minSdkVersion 8
targetSdkVersion 22
versionCode 1
versionName 1.0
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
}
defaultConfig{} 默認配置,是ProductFlavor類型。它共享給其他ProductFlavor使用sourceSets{ } 源文件目錄設置,是AndroidSourceSet類型。buildTypes{ } BuildType類型signingConfigs{ } 簽名配置,SigningConfig類型productFlavors{ } 產品風格配置,ProductFlavor類型testOptions{ } 測試配置,TestOptions類型aaptOptions{ } aapt配置,AaptOptions類型lintOptions{ } lint配置,LintOptions類型dexOptions{ } dex配置,DexOptions類型compileOptions{ } 編譯配置,CompileOptions類型packagingOptions{ } PackagingOptions類型jacoco{ } JacocoExtension類型。 用於設定 jacoco版本splits{ } Splits類型。
在DSL文檔中,以上每個類型都有它的詳細配置選項
自動簽名、混淆、打包、注入多個渠道。
例,module>build.gradle:
apply plugin: 'com.android.application'
/*
定義一個方法,僅def聲明時,返回類型任意(自動判斷)
可以將返回值直接寫成String 或def String
gradle支持groovy語言,groovy默認引入的包有:
java.io.* java.lang.* java.math.BigDecimal java.math.BigInteger
java.net.* java.util.* groovy.lang.* groovy.util.*
*/
def String computeVersionName() {
return 8.8.8
}
android {
compileSdkVersion 22
buildToolsVersion 22.0.1
defaultConfig {
applicationId com.stone.myapplication
minSdkVersion 8
targetSdkVersion 22
versionCode 1
versionName computeVersionName() //使用外部定義的方法
/*
manifestPlaceholders
manifest中使用占位符,如:<... android:name=${YOUR_APP_KEY} >
以[key-value]形式替換:[YOUR_APP_KEY:value]
*/
manifestPlaceholders = [YOUR_APP_KEY: 友盟後台的appkey]
}
signingConfigs { //gradle assembleRelease
/*
可以定義多個簽名配置項,如下面的myConfig
*/
myConfig {
storeFile file(stone.keystore)
storePassword mypasswd
// storePassword System.console().readLine(
Keystore password: )
keyAlias stone
keyPassword mypasswd
// keyPassword System.console().readLine(
Key password: )
}
}
buildTypes {
/*
可以配置多個buildType項,如下面的release,debug,aabbcc
*/
release {
minifyEnabled true //譯:使變小enabled。 即啟用混淆器
//混淆文件:sdk/tools/proguard/proguard-android.txt 和 當前module下的proguard-rules.pro
// proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
//getDefaultProguardFile('proguard-android.txt'),
//getDefaultProguardFile('proguard-android-optimize.txt'),
signingConfig signingConfigs.myConfig
zipAlignEnabled true //混淆後的zip優化,默認為true,可不寫。當不顯示配置為true時,不會生成unaligned.apk
}
debug {
debuggable true //啟用debug的buildType配置
}
aabbcc {//自定義配置,未配置簽名項,所以會生成未簽名apk
multiDexEnabled true
}
}
productFlavors {
/*
productFlavors-產品風格:
即不同產品的配置,它會基於上面的公共配置項defaultConfig
下面的配置項與buildTypes{}中的配置項,成類似sql中的全聯(full join)關系
當執行 $gradle build 命令後,會生成:
module-flavor1-release-unaligned.apk
module-flavor1-release.apk
module-flavor1-debug-unaligned.apk
module-flavor1-debug.apk
module-flavor1-aabbcc.apk
...flavor2...apk
applicationId 用於標識 在谷歌Play商店上的唯一標識 默認不配置,則與app的AndroidManifest.xml中的package一致
僅替換中的package屬性值,其它不受影響
*/
flavor1 {
proguardFiles 'proguard-rules.pro'
applicationId com.stone.myapplication.pro //比如 專業版
manifestPlaceholders = [channelID: 百度應用平台]
}
flavor2 {
proguardFile 'proguard-rules.pro'
applicationId com.stone.myapplication.free //比如 免費版
manifestPlaceholders = [channelID: 豌豆夾]
}
}
}
dependencies {
// Local binary dependency 本地jar包
compile fileTree(dir: 'libs', include: ['*.jar'])
// Module dependency 引用android-library項目
compile project(':eventbuslib')
/*
Remote binary dependency download to local group:name:version
配置遠程倉庫中的jar包,打包時,檢查本地有沒有,若沒有則下載到本地。
*/
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:cardview-v7:22.0.0'
compile 'com.android.support:recyclerview-v7:22.0.0'
}
關於多渠道,其實就是定義了多個flavor。用manifestPlaceholders配置,替換manifest中的占位符${}。
manifest.xml:
補充一個引用遠程jar包的操作,見下圖:

Android Dialog 設置字體大小的具體方法
先看下面圖片:這是我在做登錄頁面的時候,調用系統的ProgressDialog 進行等待,可是看起來很不協調,左邊的等待圖片過大,右邊文字過小,看起來老別扭,雖然功能上不
android 自定義AlertDialog 與Activity相互傳遞數據
主要實現功能:1、從Activity的TextView中獲取字符串設置到AlertDialog的TextView和EditText中2、將AlertDialog的Edit
Android RecyclerView瀑布流布局添加Footer實現上拉加載
這篇文章應該是晚到了好幾個月,之前想寫,但是中途遇到了一些棘手的問題,無奈沒有去寫。寫這篇文章的最初來源是一個朋友問我在Android中如何實現瀑布流布局?,當時我的回答
UISearchBar的使用
UISearchBar功能與UITextField類似,也是單行字符輸入框常用用途:用於搜索功能的實現使用注意事項:1、書簽按鈕屬性與搜索回車按鈕屬性不能同時進行設置,只