【Android】Android多渠道打包--Gradle打包

来源:https://www.cnblogs.com/milovetingting/archive/2019/08/15/11358298.html
-Advertisement-
Play Games

Android多渠道打包 Gradle打包 前言 由於App一般都會在多個應用市場上架,為了分析App在每個不同渠道的具體的數據,一般都會對不同渠道打包不同的App。多渠道打包有多種方式,這裡只介紹利用Gradle進行多渠道打包。 步驟 1、在AndroidManifest.xml中增加配置 其中, ...


Android多渠道打包--Gradle打包

前言

由於App一般都會在多個應用市場上架,為了分析App在每個不同渠道的具體的數據,一般都會對不同渠道打包不同的App。多渠道打包有多種方式,這裡只介紹利用Gradle進行多渠道打包。

步驟

1、在AndroidManifest.xml中增加配置

<meta-data
            android:name="APP_CHANNEL"
            android:value="${APP_CHANNEL_VALUE}" />

其中,APP_CHANNEL為配置的屬性名。APP_CHANNEL_VALUE為在build.gradle中配置的變數。

2、在build.gradle中增加productFlavors配置

productFlavors {
        baidu {
            manifestPlaceholders = [APP_CHANNEL_VALUE: "baidu"]
        }
        qq {
            manifestPlaceholders = [APP_CHANNEL_VALUE: "qq"]
        }
    }

在這裡,增加了兩個渠道配置信息:baidu和qq。在manifestPlaceholders的配置中,APP_CHANNEL_VALUE即為在AndroidManifest用到的變數。

註意:Gradle3.0以上版本,需要在defaultConfig節點中增加以下配置:

flavorDimensions "default"

3、渠道名稱獲取

private String getMetaData(Context context, String key) {
        try {
            PackageManager packageManager = context.getPackageManager();
            ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context
                    .getPackageName(), PackageManager.GET_META_DATA);
            return applicationInfo.metaData.getString(key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

4、修改應用名稱

productFlavors {
        baidu {
            manifestPlaceholders = [app_name: "@string/app_name_baidu", APP_CHANNEL_VALUE: "baidu"]
        }
        qq {
            manifestPlaceholders = [app_name: "@string/app_name_qq",APP_CHANNEL_VALUE: "qq"]
        }
    }

在manifestPlaceholders中增加app_name的配置,在AndroidManifest.xml中引用:

<application
        android:allowBackup="true"
        android:icon="${app_icon}"
        android:label="${app_name}"
        android:roundIcon="${app_icon}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="APP_CHANNEL"
            android:value="${APP_CHANNEL_VALUE}" />

        //省略其它內容
    </application>

5、修改應用圖標

productFlavors {
        baidu {
            manifestPlaceholders = [app_name: "@string/app_name_baidu",app_icon:"@mipmap/icon_baidu", APP_CHANNEL_VALUE: "baidu"]
        }
        qq {
            manifestPlaceholders = [app_name: "@string/app_name_qq", app_icon:"@mipmap/icon_qq",APP_CHANNEL_VALUE: "qq"]
        }
    }

在manifestPlaceholders中增加app_icon的配置,在AndroidManifest.xml中引用:

<application
        android:allowBackup="true"
        android:icon="${app_icon}"
        android:label="${app_name}"
        android:roundIcon="${app_icon}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="APP_CHANNEL"
            android:value="${APP_CHANNEL_VALUE}" />

        //省略其它內容
    </application>

6、修改應用包名

productFlavors {
        baidu {
            applicationIdSuffix ".baidu"
            manifestPlaceholders = [app_name: "@string/app_name_baidu",app_icon:"@mipmap/icon_baidu", APP_CHANNEL_VALUE: "baidu"]
        }
        qq {
            applicationIdSuffix ".qq"
            manifestPlaceholders = [app_name: "@string/app_name_qq", app_icon:"@mipmap/icon_qq",APP_CHANNEL_VALUE: "qq"]
        }
    }

增加applicationIdSuffix屬性。

7、Java中調用gradle中的變數

buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "String","FIELD_TEST","\"FIELD_TEST\""
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "String","FIELD_TEST","\"FIELD_TEST\""
        }
    }

增加buildConfigField。同步後,通過BuildConfig.FIELD_TEST能獲取到新增的變數值。

8、完整的gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.wangyz.multichannel"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        flavorDimensions "default"
    }
    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "String","FIELD_TEST","\"FIELD_TEST\""
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "String","FIELD_TEST","\"FIELD_TEST\""
        }
    }
    productFlavors {
        baidu {
            applicationIdSuffix ".baidu"
            manifestPlaceholders = [app_name: "@string/app_name_baidu",app_icon:"@mipmap/icon_baidu", APP_CHANNEL_VALUE: "baidu"]
        }
        qq {
            applicationIdSuffix ".qq"
            manifestPlaceholders = [app_name: "@string/app_name_qq", app_icon:"@mipmap/icon_qq",APP_CHANNEL_VALUE: "qq"]
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.+'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

9、完整的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wangyz.multichannel">

    <application
        android:allowBackup="true"
        android:icon="${app_icon}"
        android:label="${app_name}"
        android:roundIcon="${app_icon}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="APP_CHANNEL"
            android:value="${APP_CHANNEL_VALUE}" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 結構是一種可以包含數據成員和方法成員的值類型數據結構。為結構分配數據時不需要從托管堆中分配記憶體,結構類型的變數直接包含了該結構的數據。結構中可以包含構造函數,常量,欄位方法,屬性,運算符,事件和嵌套類型等,但如果要同事包括上述幾種成員,則應該考慮使用類。 結構是一種可以包含數據成員和方法成員的值類型 ...
  • 使用CefSharp可以在.NET輕鬆的嵌入Html,不用擔心WPF與Winform 控制項與它的相容性問題,CefSharp大部分的代碼是C#,它可以在VB或者其他.NET平臺語言中來進行使用。 近幾天來,公司項目中需要使用WebBrowser,其中考慮了幾個控制項,如1.Winform中的WebBr ...
  • 文章轉載自:http://www.pythonheidong.com/blog/article/2967/ 今年畢業,本學期找工作期間在面試前做的一些臨時的準備 以下的關於老趙分享的面試題解答參考了手頭的書籍和視頻教程,以及網上的資料,現整理出來希望對大家有所幫助,不對或欠佳的地方望大家指出來我好改 ...
  • 文章轉載自:http://www.pythonheidong.com/blog/article/2184/ 1.維護資料庫的完整性、一致性、你喜歡用觸發器還是自寫業務邏輯?為什麼? 答:儘可能用約束(包括CHECK、主鍵、唯一鍵、外鍵、非空欄位)實現,這種方式的效率最好;其次用觸發器,這種方式可以保 ...
  • 今天的內容是Scaffold腳手架、AppBar組件、BottomNavigationBar組件,通過這三個組件,能大體構建出一個app的主頁面,頂導和底導。 ...
  • About prefs:root=General&path=About Accessibility prefs:root=General&path=ACCESSIBILITY Airplane Mode On prefs:root=AIRPLANE_MODE Auto-Lock prefs:root ...
  • 有兩個Android項目,一個為pozhudl,一個為app,現在欲將pozhudl項目作為module導入到app中,並調用pozhudl項目中的類 先在pozhudl項目的build.gradle 中修改這句 apply plugin: 'com.android.application' 為 a ...
  • 1.wxml <input class="weui-input" type='number' bindinput="emailInput"/> 2.js (1) data: { verify:'' }, (2) emailInput: function(e){ this.setData({ veri ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...