編輯:關於Android編程
Gradle是一個工具,同時它也是一個編程框架.。可以調用Gradle自帶的api編譯我們的android工程,打包成apk或aar,也可以在.gradle文件中使用Groovy語言進行邏輯編程。我們在android工程中使用的每個.gradle文件 和task執行時都會轉換成一個個的java對象,運行在java虛擬機上。其中主要的有Gradle對象、Project對象和Settings對象。
後面我們通過配置和創建屬性文件實現以下幾個任務:
1、實現多渠道打包
2、通過文件方式配置版本號 及版本名等信息
3、通過文件方式配置簽名文件
4、根據不同渠道動態修改程序名稱和包名
5、根據不同渠道生成apk文件名稱及自定義文件輸出路徑
6、根據不同渠道定制專屬頁面
在實現任務之前 先要說幾個基礎知識:
Gradle中聲明變量有三種方式 一種是 通過def關鍵字 如 def a =1 ,這種聲明只能在聲明所在的方法中使用相當於臨時變量,原因後面會詳細說下,另一種是 ext關鍵字 如ext.a = 1,這種方式是可以在外部聲明在其中方法中使用的, 類似於我們成員變量,另外還有就是 直接聲明 a =1,這種方式也可以在外部聲明在其中方法中使用,但不能在文件外部調用,其實還有一種方式 和ext 效果一樣,
apply plugin: 'com.android.application' // 默認版本號 ext.appVersionCode = 1 // 默認版本名z ext.appVersionName = "1.0" // 默認apk輸出路徑 ext.appReleaseDir = "../apks" // 默認正式包後綴名 ext.appSuffixName = "_release.apk"
// 也可以向下面這種方式聲明變量
ext{
a =1
b = 2
}
//定義一個方法 獲取當前日期
def getPackageTime() {
//gradle中創建對象 也像java中一樣 通過new 關鍵字實現
def date = new Date()
def formattedDate = date.format('yyyy_MM_dd_HHmm')
return formattedDate
}
// 加載版本信息配置文件方法
def loadProperties() {
//將我們的版本號等信息配置在了local.properties 文件中,這裡的file() 是一個方法,返回一個File對象
//Properties 是一種數據類型,其實是就是繼承自hashtable , 可以解析.properties文件,並以鍵值對方式存儲起來
//public class Properties extends Hashtable
def proFile = file("../local.properties")
Properties pro = new Properties()
proFile.withInputStream { stream->
pro.load(stream)
}
//為上面定義的變量賦值
appReleaseDir = pro.appReleaseDir
appVersionCode = Integer.valueOf(pro.appVersionCode)
appVersionName = pro.appVersionName
appSuffixName = pro.appSuffixName
}
// 調用方法 加載版本信息
loadProperties()
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "com.gqs.demo"
minSdkVersion 14
targetSdkVersion 24
versionCode appVersionCode
versionName appVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
// 到這裡就完成了 任務 2
//signingConfigs 是對簽名文件的配置
signingConfigs {
debug {
}
release {
def Properties localProps = new Properties()
//signature.properties 是配置簽名信息的配置文件 後面會貼出來
localProps.load(new FileInputStream(file('../signature.properties')))
storeFile file(localProps["STORE_FILE"])
keyAlias localProps["KEY_ALIAS"]
storePassword localProps["STORE_PASSWORD"]
keyPassword localProps["KEY_PASSWORD"]
}
}
// 到這裡就完成了 任務 3 通過文件方式配置簽名文件//buildTypes 對不同的打包類型 進行配置
//定義apk的輸出路徑
applicationVariants.all { variant ->
variant.outputs.each { output ->
//開始輸出,自定義輸出路徑
output.outputFile =
new File(appReleaseDir + getPackageTime() +//獲取當前日期
"_v" + appVersionName +
variant.productFlavors[0].name +//每一個渠道的名稱
appSuffixName) //appSuffixName 是我們聲明的文件後綴
}
}
// 到這裡 就實現了 任務 5 根據不同渠道生成apk文件名稱及自定義文件輸出路徑
} }
//productFlavors 就是實現不同渠道打包了
productFlavors {
//對每個渠道 設定特定的包名 也就是applicationId
rainbow{
// 都使用默認設置
}
xiaomi {
//設置特定渠道的包名
applicationId "com.rainbow.xiaomi"
}
m360 {
applicationId "com.rainbow.qihu"
}
productFlavors.all { flavor ->
//動態設置不同渠道的app name
// AndroidManifest文件中 android:label="${APP_NAME}"
//使用渠道名稱替換 APP_NAME,使每個渠道都有自己的 app名稱
flavor.manifestPlaceholders = [APP_NAME: name]下面是 signature.properties
STORE_FILE=../your key STORE_PASSWORD=*** KEY_ALIAS=*** KEY_PASSWORD=****=========================== local.properties
sdk.dir=/Applications/android_tools/android-sdk-macosx #=====以下是自己定義的內容===== # 打包的輸出路徑 appReleaseDir=./apks/ # APP版本號,用來升級使用 appVersionCode=2 # APP版本名稱,最終打包使用 appVersionName=1.0.0.2 # app正式版包名後綴 appSuffixName=_release.apk最後 實現 任務 6根據不同渠道定制專屬頁面 只要 在我們的 src文件夾下 創建和渠道相同的文件夾 可以了 ,裡面放入我們要修改的布局文件或 values中的文件。 其實默認 我們用的都是 src下 main中的文件 ,如果我們創建了和渠道名稱相同的文件夾 ,gradle 打包的時候 就會從對應到文件夾中取數據了。
關於tomcat中Servlet對象池
Servlet在不實現SingleThreadModel的情況下運行時是以單個實例模式,如下圖,這種情況下,Wrapper容器只會通過反射實例化一個Servlet對象,對
Android不一樣的走馬燈,MarqueeManualView
眾所周知,當需要文字進入走馬燈狀態的時候,需要設置屬性 android:ellipsize="marquee" 但是有時候並不能啟
Android開源項目SlidingMenu深入剖析
SlidingMenu簡介: SlidingMenu的是一種比較新的設置界面或配置界面效果,在主界面左滑或者右滑出現設置界面,能方便的進行各種操作.目前有大量的應用都在使
開源項目circular-progress-button源碼分析
今天再來介紹該作者的另一個開源項目circular-progress-button,效果更酷炫。項目地址:https://github.com/dmytrodanylyk