生活随笔
收集整理的這篇文章主要介紹了
Qt for Android gradle编译同时输出多个渠道apk
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
Gradle是Android目前主流的編譯工具,Gradle剛出來的時候確實有很多詬病,比如編譯速度,那真是一個慢啊,不過隨著版本的更新,現在的gradle可比當年牛逼多了,功能也越來越完善,畢竟是谷歌的親兒子。那么在用Qt 做android開發時候,也是默認使用Gradle來編譯,今天主要來看看如何在Qt工程下修改gradle文件并輸出多個渠道的apk并自動簽名,輸出多個渠道apk主要是用于統計每個渠道的安裝信息。
正文
在之前寫過的這篇文章中:Qt for Android創建AndroidManifest.xml和Java類文件 介紹了如何創建AndroidManifest.xml文件,創建后會自動生成gradle的相關文件,如下圖:
在這里我們只需要編輯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)}}}
}
注意,下面就是配置自動簽名流程:
signingConfigs {release {storeFile file("xxxxx.keystore")storePassword "xxxxxx"keyAlias "xxxxx"keyPassword "xxxxxx"}}
接下來在AndroidManifest.xml文件中添加渠道獲取的信息:
<meta-data android:name="CHANNEL" android:value="${CHANNEL_NAME}"/>
接著,回到java代碼中,添加獲取渠道的接口:
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 "";}}
需要導入包:
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
ok,這就能直接獲取到每個安裝包的渠道名了。
總結
以上是生活随笔為你收集整理的Qt for Android gradle编译同时输出多个渠道apk的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。