生活随笔
收集整理的這篇文章主要介紹了
Qt for Android gradle编译同时输出多个渠道apk
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前言
Gradle是Android目前主流的編譯工具,Gradle剛出來(lái)的時(shí)候確實(shí)有很多詬病,比如編譯速度,那真是一個(gè)慢啊,不過(guò)隨著版本的更新,現(xiàn)在的gradle可比當(dāng)年牛逼多了,功能也越來(lái)越完善,畢竟是谷歌的親兒子。那么在用Qt 做android開發(fā)時(shí)候,也是默認(rèn)使用Gradle來(lái)編譯,今天主要來(lái)看看如何在Qt工程下修改gradle文件并輸出多個(gè)渠道的apk并自動(dòng)簽名,輸出多個(gè)渠道apk主要是用于統(tǒng)計(jì)每個(gè)渠道的安裝信息。
正文
在之前寫過(guò)的這篇文章中:Qt for Android創(chuàng)建AndroidManifest.xml和Java類文件 介紹了如何創(chuàng)建AndroidManifest.xml文件,創(chuàng)建后會(huì)自動(dòng)生成gradle的相關(guān)文件,如下圖: 在這里我們只需要編輯build.gradle文件即可,雙擊打開然后修改該文件,添加簽名以及將要輸出的渠道信息:
buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.2.3'}
}allprojects {repositories {jcenter()}
}apply plugin: 'com.android.application'dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])
}android {/******************************************************** The following variables:* - androidBuildToolsVersion,* - androidCompileSdkVersion* - qt5AndroidDir - holds the path to qt android files* needed to build any Qt application* on Android.** are defined in gradle.properties file. This file is* updated by QtCreator and androiddeployqt tools.* Changing them manually might break the compilation!*******************************************************/compileSdkVersion androidCompileSdkVersion.toInteger()buildToolsVersion androidBuildToolsVersionsourceSets {main {manifest.srcFile 'AndroidManifest.xml'java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']//res.srcDirs = [qt5AndroidDir + '/res', 'res']res.srcDirs = ['res']resources.srcDirs = ['src']renderscript.srcDirs = ['src']assets.srcDirs = ['assets']jniLibs.srcDirs = ['libs']}}lintOptions {abortOnError false}signingConfigs {release {storeFile file("xxxxx.keystore")storePassword "xxxxxx"keyAlias "xxxxx"keyPassword "xxxxxx"}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'signingConfig signingConfigs.release}}productFlavors {yingyongbao {manifestPlaceholders = [ CHANNEL_NAME:"YingYongBao" ]}wandoujia {manifestPlaceholders = [ CHANNEL_NAME:"WanDouJia" ]}yingyongbao {manifestPlaceholders = [ CHANNEL_NAME:"YingYongBao" ]}}
}def releaseTime() {return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}
//這里是修改輸出的apk名稱
android.applicationVariants.all { variant ->variant.outputs.each { output ->def outputFile = output.outputFileif (outputFile != null && outputFile.name.endsWith('.apk')) {File outputDirectory = new File(outputFile.parent);def fileNameif (variant.buildType.name == "release") {fileName = "Demo_${variant.productFlavors[0].name}_${releaseTime()}.apk"output.outputFile = new File(outputDirectory, fileName)}}}
}
注意,下面就是配置自動(dòng)簽名流程:
signingConfigs {release {storeFile file("xxxxx.keystore")storePassword "xxxxxx"keyAlias "xxxxx"keyPassword "xxxxxx"}}
接下來(lái)在AndroidManifest.xml文件中添加渠道獲取的信息:
<meta-data android:name="CHANNEL" android:value="${CHANNEL_NAME}"/>
接著,回到j(luò)ava代碼中,添加獲取渠道的接口:
public static String getChannel(){ComponentName componentName = new ComponentName(m_instance,MainActivity.class);try{ActivityInfo info = m_instance.getPackageManager().getActivityInfo(componentName,PackageManager.GET_META_DATA);String msg =info.metaData.getString("CHANNEL");return msg;}catch (Exception e) {e.printStackTrace();return "";}}
需要導(dǎo)入包:
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
ok,這就能直接獲取到每個(gè)安裝包的渠道名了。
總結(jié)
以上是生活随笔 為你收集整理的Qt for Android gradle编译同时输出多个渠道apk 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。