1. 程式人生 > >Android利用Gradle多渠道打包如何動態替換資源,文字

Android利用Gradle多渠道打包如何動態替換資源,文字

首先我們在app的build.gradle下面加入如下程式碼,以oem1為示例,

productFlavors {
        oem1 {
            manifestPlaceholders = [
                    oemIcon : "@drawable/oem1",
            ]
        }
}

以上程式碼 manifestPlaceholders 主要是用於在AndroidManifest.xml內可以動態的替換oem圖示,我們看AndroidManifest.xml裡面是如何用到這oemIcon的

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

以上程式碼主要是關注android:icon="${oemIcon}" ,這個其實在gradle打包後悔自動替換成我們在build.gradle裡面設定的‘@drawable/oem1’

,這樣就可以根據不同渠道包替換成不同的icon

動態替換文字

首先在build.gradle裡面配置我們需要的文字

productFlavors {
        oem1 {
            resValue("string","dynamic_text","oem1的動態文字")
            manifestPlaceholders = [
                    oemIcon : "@drawable/oem1",
            ]
        }
}

注意:我們的string.xml裡面不允許有dynamic_text欄位,有的話編譯會報錯.

主要是resValue一行我們詳細解釋一下,
string表示的是我們要生成一個string欄位,
dynamic_text指的是欄位名稱便於我們程式裡面使用,
"oem1的動態文字"指的是我們的字串的值

其實這一句想相當於我們在string.xml裡面定義如下一行

<string name="dynamic_text">oem1的動態文字</string>

動態替換資原始檔

如果在程式中我們有一個地方需要根據不同的渠道對應不同的drawable,我們就可以用下列方法,下列方法是假設程式中有一處需要設定圖片,思路是我們首先在gradle裡面設定好值,在AndroidManifest.xml裡面使用META_DATA,然後再從程式裡面呼叫

build.gradle如下

 productFlavors {
        oem1 {
            manifestPlaceholders = [
                    oemIcon : "@drawable/oem1",
            ]
        }
 }

AndroidManifest.xml如下

<meta-data
            android:name="OEM_LOGO"
            android:resource="${oemIcon}"
            />

java程式如下
MainActivity.java


img.setImageResource(Util.getMetaDataInt(this,"OEM_LOGO"));

Util.java

public class Util {

    public static int getMetaDataInt(Context context,String name) {
        try {
            ApplicationInfo appInfo = context.getApplicationContext().getPackageManager()
                    .getApplicationInfo(context.getApplicationContext().getPackageName(),
                            PackageManager.GET_META_DATA);
            int logo = appInfo.metaData.getInt(name);
            return logo;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return -1;
    }

}

主要思路就是利用META_DATA來貨渠道資源的int值並且返回到程式中,達到動態生成的目的

相關推薦

Android利用Gradle多渠道打包如何動態替換資源文字

動態替換APP logo 首先我們在app的build.gradle下面加入如下程式碼,以oem1為示例, productFlavors { oem1 { manifestPlaceholders = [

廈門之旅第一篇Gradle多渠道打包(動態設定App名稱應用圖示背景圖片狀態列顏色)

我不是詩人,寫不出廈門的美;我不是歌手,唱不出廈門的情;我不是畫家,畫不出廈門的景。 我只是一名程式設計師,我只能用我的眼,我的心去看去感受,那久違的海風吹拂著臉頰,好似內心那一份煩躁與沉重也隨著海風飄向了遠方 . . . . . . 一、Grad

Android Studio--Gradle多渠道打包

由於國內Android市場眾多渠道,為了統計每個渠道的下載及其它資料統計,就需要我們針對每個渠道單獨打包,如果讓你打幾十個市場的包豈不煩死了,不過有了Gradle,這再也不是事了。友盟多渠道打包廢話不多說,以友盟統計為例,在AndroidManifest.xml裡面會有這麼一

Android Studio Gradle 多渠道自動打包動態修改HostUrl簽名apk混淆配置詳解

  文/ skay 最近遇到專案從Eclispe遷移到Android studio,以前的Ant自動打包指令碼已經相容不好了,所以用了Gradle實現打渠道包,切換環境等, Ant打包指令碼 <target name="-release-sign"

ANDROID STUDIO系列教程六--GRADLE多渠道打包

tor 等待 time() utf 腳本 manifest file resource 一個 由於國內Android市場眾多渠道,為了統計每個渠道的下載及其它數據統計,就需要我們針對每個渠道單獨打包,如果讓你打幾十個市場的包豈不煩死了,不過有了Gradle,這再也不是事了。

android多渠道打包(動態改變地址打包只需改下版本號)

多渠道打包本來不想寫的,因為比較麻煩,所以沒打算寫。只是前段時間因為電腦藍屏重灌了系統,導致不能打包了,所以又百度了半天,今天就寫下來做個筆記。廢話不多說,進入主題。配置多渠道打包就要使用友盟統計build.gradle中新增友盟的依賴包://友盟統計 compile 'co

android gradle多渠道打包打包選定的so資料夾

productFlavors { LDAND001 { ndk {//這裡控制apk要生成的so檔案 abiFilters "armeabi-v7a" abiFilters "armeabi" abiFilters "x86" abiFilters "x86_

Android美團多渠道打包Walle整合

一、為什麼使用美團多渠道打包的方式? 打包更加快速 傳統的通過productFlavors渠道包的方式,渠道10個以內還可以接受,如果100個渠道包,每個包需要打5Min,就是將近10個小時的打包,而採用美團Walle多渠道打包的方式只需要打一個包的時間。 配置更加靈活 可以在APK渠道包中通過配

Gradle多渠道打包

Gradle多渠道打包 多渠道打包基本實現 不同的渠道包顯示不同的APP_NAME 不同的渠道包顯示的res資源不一樣 簡單的多渠道打包 1.在AndroidMainfest.xml的application中配置自定義項

Android 友盟多渠道打包

目錄 一、簡介 一、簡介 為了統計不同渠道上的下載數量及使用者活動情況,方便後臺做運營統計。我們需要在安裝包中新增不同的標識(渠道資訊 Channel)。多渠道的實現方式多種多樣,此篇只實現友盟多渠道打包的方法。友盟多渠道打包方法試用於少量的渠道,如果要

android Ant 批量多渠道打包 總結!

最近研究android裡用ant打多個渠道的apk包,終於搞出頭緒!!走了很多錯路,希望大家不要這樣子!!下面就是個人的幾點總結,希望對大家有幫助:      首先說的是我用的ant不是eclipse和android SDk裡面自帶的ant,而是從這裡下載的 -- Ant

Android利用gradle同時編譯多包(測試環境地址、生產環境地址)

前言 小公司,專案有2套環境:一個測試環境,一個生產環境。測試會找客戶端要測試環境包或生產環境包,我覺得嫌煩,於是,同時編譯。 分析 首先,我們的專案中,生產環境和測試環境僅為string.xml中的兩個地址不通,其他程式碼都是相同的。 這個需求和多

Android美團多渠道打包方式

以umeng為例,官方的渠道配置方式: <!-- 友盟API Key --> <meta-data android:name="UMENG_APPKEY" android:va

Android使用Gradle自動化打包

假如我們使用了友盟sdk或者別的sdk,我們需要在androidMainifest 填寫一個渠道號,來幫助我們統計。也就說app釋出之後需要每個應用市場對應著唯一的渠道號。如果我們不使用自動化打包的話,就非常的麻煩,需要自己去改Mainifest.xml中的

【騰訊Bugly乾貨分享】Android 新一代多渠道打包神器

關於作者: 李濤,騰訊Android工程師,14年加入騰訊SNG增值產品部,期間主要負責手Q動漫、企鵝電競等專案的功能開發和技術優化。業務時間喜歡折騰新技術,寫一些技術文章,個人技術部落格:www.ltlovezh.com 。 ApkChanne

Android中的多渠道打包之友盟統計篇(二)

上篇簡單瞭解了Android中的多渠道打包,這篇主要說正事了---》 如何多渠道打包: 首先,多渠道打包最重要的是可以統計不同渠道下的應用的情況,比如下載量,日活量等等.. 關於統計的話國內有兩個比較出名的第三方統計工具吧:友盟統計和百度移動統計 這篇說的是用友盟,如果想要

android Ant 批量多渠道打包

一直以來都是手動打包android程式,真可謂苦不堪言啊,以前試過用ant打包,但是失敗了,最近剛到新公司,又開始研究ant這玩意了,查閱了網上一些文章,結合自己的情況,硬是要弄出來才行,這裡就作下記錄吧。 1,準備 ant打包自然需要ant,可以去http://an

Android 新一代多渠道打包神器

ApkChannelPackage是一種快速多渠道打包工具,同時支援基於V1和V2簽名進行渠道打包。外掛本身會自動檢測Apk使用的簽名方法,並選擇合適的多渠道打包方式,對使用者來說完全透明。 概述 眾所周知,因為國內Android應用分發市場的現狀,我們在釋出APP

Android開發AndroidStudio多渠道打包

 最近不斷有朋友向我諮詢AndroidStudio多渠道的打包方法,今天整理一下之前積累的打包套路,寫一篇文章,手把手的教給大家。         說到多渠道,這裡不得不提一下友盟統計,友盟統計是大家日常開發中常用的渠道統計工具,而我們的打包方法就是基於友盟統計實施的。按

關於Android中根據ID名動態獲取資源的兩個方法

在開發中, 我們習慣了類似下面這種方式去實現引用資源: context.getResources().getDrawable(R.drawable.flower);但是,當我們提前知道這個資源的id,想動態去引用,而不是在id裡面固化應該怎麼辦呢? 比如某個圖片資源的id是