編輯:關於Android編程
我們需要使用一個變量標明該app的渠道,通常我們可以在manifest中的application節點下聲明,如下。
然後將CHANNEL_VALUE的值替換成對應的渠道名。我們可以使用gradle的flavor替我們完成
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
} data-snippet-id=ext.ce943ea9d51c68f4f0a3339e1de051bc data-snippet-saved=false data-csrftoken=Eq6LIWAR-4Cx8Srvsca1PFMG7mGEOwWNPoGc data-codota-status=done> productFlavors {
wandoujia {}
qihu360 {}
baidu {}
hiapk {}
shoujizhushou {}
tencent {}
xiaomi {}
anzhi {}
uc {}
appchina {}
wangyi {}
mumayi {}
huawei {}
lenovo {}
flyme {}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
當然有時候我們需要配置某些渠道自動更新,某些渠道部自動更新,這時候需要一個變量來標明。我們讓所有渠道默認支持自動更新,讓豌豆莢的不進行自動更新。
defaultConfig {
buildConfigField boolean, AUTO_UPDATES, true
}
productFlavors {
wandoujia {
buildConfigField boolean, AUTO_UPDATES, false
}
}
在程序中可以這樣獲得該變量
boolean autoUpdate=BuildConfig.AUTO_UPDATES;
甚至有時候需要更改生成的apk的名字,這時候可以自己定義生成的名字
variant.outputs.each { output ->
def oldFile = output.outputFile
def newName = '';
if (variant.buildType.name.equals('release')) {
def releaseApkName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + '-signed.apk'
output.outputFile = new File(oldFile.parent, releaseApkName)
}
if (variant.buildType.name.equals('beta')) {
newName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + -build + getDate() + .apk
output.outputFile = new File(oldFile.parent, newName)
}
if (variant.buildType.name.equals('debug')) {
newName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + -debug + getDate() + .apk
output.outputFile = new File(oldFile.parent, newName)
}
}
}
} data-snippet-id=ext.2d8967d75590fed2f15bdfa52c0825b3 data-snippet-saved=false data-csrftoken=w6snEJhm-V_o5qFIgYY_rrEhmATollsIqVfA data-codota-status=done>//獲取產品名
def getProductName() {
return ProductName
}
//獲取時間戳
def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMddHHmm')
return formattedDate
}
android {
...
//修改生成的apk名字
applicationVariants.all { variant ->
variant.outputs.each { output ->
def oldFile = output.outputFile
def newName = '';
if (variant.buildType.name.equals('release')) {
def releaseApkName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + '-signed.apk'
output.outputFile = new File(oldFile.parent, releaseApkName)
}
if (variant.buildType.name.equals('beta')) {
newName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + -build + getDate() + .apk
output.outputFile = new File(oldFile.parent, newName)
}
if (variant.buildType.name.equals('debug')) {
newName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + -debug + getDate() + .apk
output.outputFile = new File(oldFile.parent, newName)
}
}
}
}
最後我們還需要在程序中獲得我們的渠道名進行後續的一些操作,比如做一些統計之類的工作
String channel=AppUtil.getMetaValue(this,CHANNEL_NAME);
Log.d(TAG,channel);
一切完成之後,我們就可以生成渠道包了
打開終端,輸入以下命令回車就生成了所有的渠道包
gradlew assembleRelease
此外還可以點擊andorid studio右邊懸停的的gradle按鈕,彈出的窗口裡面有個圓形的execute gradle task的按鈕,command Line裡輸入assembleRelease點擊ok也可以生成所有渠道包
Fragment相當於一個小型activity,因為Fragment可以實現activity中所有的功能,不同的是Fragment可以嵌入activity,一個activ
先上圖:說在前面:View的事件分發簡單記憶方法::dispathTouchEvent----->onTouchEvent------->onClick如上圖
概述之前在討論組裡聽到許多討論okhttp的話題,可見okhttp是一個相對成熟的解決方案,看到android4.4後網絡訪問的源碼中HttpURLConnection已
Android實習札記(8)---ViewPager+Fragment實例講解 在札記(5)中我們就說過要弄一個模仿微信頁面切換的東東,就是V