編輯:關於Android編程
由於國內的android市場渠道很多,為了統計每個渠道的下載和它的數據統計,我們開發人員就需要針對每個渠道打包,如果一個個打包這顯然不是開發人員愚蠢的行為,Androidstudio上有了Gradle,這就很簡單了,當然用eclipse的也有它多渠道打包的方法,這些說的是AS的打包方法。
這裡以友盟統計作為實例:
1.在AndroidManifest.xml裡面添加一句:
2.在build.gradle設置productFlavors
android { productFlavors { xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] } baidu { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"] } wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } } }或者一次性修改
android { productFlavors { xiaomi {} baidu {} wandoujia {} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } }
public class MainActivity extends AppCompatActivity { private TextView mChannel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mChannel = (TextView) findViewById(tv_channel); mChannel.setText(getApplicationMetaValue("UMENG_CHANNEL")); } private String getApplicationMetaValue(String name) { String value= ""; try { ApplicationInfo appInfo =getPackageManager() .getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); value = appInfo.metaData.getString(name); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return value; } }添加完這坨代碼,我們來點擊右邊的Gradle看一下,就可以看到我們剛才添加的渠道了
4.我們雙擊一下installBaiduDebug,它就會運行安裝到手機上了
就可以獲取到相對應的渠道了,點擊其他的渠道包安裝也會獲取到相應的渠道包
5.我們要打包正式版本就要生成jks簽名文件,並且打包渠道包
然後點擊Next,去到下面那個頁面,可就可以選取相應的渠道了,也可以一次性選擇全部的渠道
然後點擊finish,喝杯茶等待完成就可以了
安裝之後就可以驗證了
6.以上是手動打包操作的,下面來一點自動化的操作
在build.gradle,哪裡添加
signingConfigs { debug { // No debug config } release { storeFile file("../yourapp.keystore") storePassword "your password" keyAlias "your alias" keyPassword "your password" } }可能這樣直接暴露出來密碼什麼的不安全,現在采用下面的方法改成:
relealse { storeFile file(RELEASE_STORE_FILE) storePassword RELEASE_STORE_PASSWORD keyAlias RELEASE_KEY_ALIAS keyPassword RELEASE_KEY_PASSWORD }然後在gradle.properties文件上加上
RELEASE_KEY_PASSWORD= "your password" RELEASE_KEY_ALIAS= "your alias" RELEASE_STORE_PASSWORD= "your password" RELEASE_STORE_FILE= "../yourapp.keystore"7.然後就可以用Androidstudio下的Terminal進行assemble命令來操作了
./gradlew assembleDebug // debug的 ./gradlew assembleRelease // Release的
然後就可以喝咖啡等待打包成功了
在Terminal下面會出現BUILD SUCCESSFUL就是成功了,然後在這裡就可以看到打包成功的apk了
除此之外assemble還能和Product Flavor結合創建新的任務,其實assemble是和Build Variants一起結合使用的,而Build Variants=Build Type+Product Flavor, 舉個例子大家就明白了:
如果我們想打包wandoujia渠道的release版本,執行如下命令就好了:
./gradlew assembleWandoujiaRelease如果我們只打wandoujia渠道版本,則:
./gradlew assembleWandoujia此命令會生成wandoujia渠道的Release和Debug版本
同理我想打全部Release版本:
./gradlew assembleRelease這條命令會把Product Flavor下的所有渠道的Release版本都打出來。
總之,assemble命令創建task有如下用法:
**assemble**: 允許直接構建一個Variant版本,例如assembleFlavor1Debug。
**assemble**: 允許構建指定Build Type的所有APK,例如assembleDebug將會構建Flavor1Debug和Flavor2Debug兩個Variant版本。
apply plugin: 'com.android.application' def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } android { compileSdkVersion 24 buildToolsVersion "24.0.3" defaultConfig { applicationId "com.multi_channel_study.demo" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // 輸出apk名稱為Multi-Channel_v1.0_2016-11-04_wandoujia.apk def fileName = "Multi-Channel_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } } } } signingConfigs { debug { // No debug config } relealse { storeFile file(RELEASE_STORE_FILE) storePassword RELEASE_STORE_PASSWORD keyAlias RELEASE_KEY_ALIAS keyPassword RELEASE_KEY_PASSWORD } } productFlavors { xiaomi {} baidu {} wandoujia {} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12' }
一、簡介1.Android ORM介紹?在平時的開發過程中,大家一定會或多或少地接觸到 SQLite。然而在使用它時,我們往往需要做許多額外的工作,像編寫 SQL 語句與
Android開發中的ProguardProguard是Android開發時經常會用到的一個工具,在Android SDK中已經集成了一個免費的Proguard版本,位於
Handler的作用一般是子線程向主線程中傳遞消息,用來主線程處理和UI相關的東西。為什麼要在子線程中用呢,因為如果主線程處理了過多耗時的東西,可能會導致假死,所以一般都
在安卓的app中,我們時常都可以留意到當我們在聊天工具中總是能查找到以前的聊天記錄,而且換了手機後就看不到了,微信就是那樣,把聊天