日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Qt for Android gradle编译同时输出多个渠道apk

發布時間:2025/1/21 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。