最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

為Android應(yīng)用增加渠道信息 自動(dòng)化不同渠道的打包過(guò)程的使用詳解

 更新時(shí)間:2013年05月09日 10:54:03   作者:  
為了統(tǒng)計(jì)渠道信息,就不得不在程序的某個(gè)地方加入渠道的信息,然后針對(duì)不同的渠道打不同的包。一般可以在Manifest文件中加入渠道編號(hào),而不直接寫在代碼中。這樣做的好處是,可以針對(duì)不同渠道,自動(dòng)化去修改Manifest文件中的渠道編號(hào),然后自動(dòng)為該渠道打包

為什么需要在應(yīng)用程序中增加渠道信息?

Android應(yīng)用的發(fā)布需要面對(duì)各種各樣的市場(chǎng),我們稱之為渠道。有的時(shí)候,我們需要知道應(yīng)用是從哪個(gè)渠道下載的。比如,我們可能需要統(tǒng)計(jì)哪些市場(chǎng)帶來(lái)的用戶量比較大。再比如,我們可能有一些盈利需要和具體的渠道進(jìn)行分成。這些都是統(tǒng)計(jì)渠道的信息。

一般如何在應(yīng)用中加入渠道信息?

為了統(tǒng)計(jì)渠道信息,就不得不在程序的某個(gè)地方加入渠道的信息,然后針對(duì)不同的渠道打不同的包。一般可以在Manifest文件中加入渠道編號(hào),而不直接寫在代碼中。這樣做的好處是,可以針對(duì)不同渠道,自動(dòng)化去修改Manifest文件中的渠道編號(hào),然后自動(dòng)為該渠道打包。

Manifest文件支持Meta Data標(biāo)簽,建議使用這種自定義標(biāo)簽。例如下面的文件片段。

復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      android:versionCode="X"

      android:versionName="X.X.X"

      package="com.XXX">

      ……

    <application android:icon="@drawable/icon"

            android:label="@string/app_name">

        ……

    <meta-data android:name="CHANNEL" android:value="C_001" />

    </application>

</manifest>


在這段代碼示例中,我們?cè)贏pplication節(jié)點(diǎn)下增加了一個(gè)meta-data標(biāo)簽,名稱是CHANNEL,值是C_001,是我們規(guī)定的一個(gè)渠道的編號(hào)。

為不同的渠道打包,就要手工或者自動(dòng)化修改C_001成為C_002、C_003等等其它我們定義的渠道編號(hào),然后再打不同的包。


程序如何讀取打包的渠道編號(hào)?

在程序代碼中,可以讀取Manifest文件中定義的meta-data。以下為代碼實(shí)例。

復(fù)制代碼 代碼如下:

   public static String getChannelCode(Context context) {

       String code = getMetaData(context, "CHANNEL");

       if (code != null) {

           return code;

       }

       return "C_000";

    } 

    private static String getMetaData(Context context, String key) {

       try {

           ApplicationInfo  ai = context.getPackageManager().getApplicationInfo(

                  context.getPackageName(), PackageManager.GET_META_DATA);

           Object value = ai.metaData.get(key);

           if (value != null) {

              return value.toString();

           }

       } catch (Exception e) {

           //

       }

       return null;

    }


如何自動(dòng)化打包過(guò)程?

我們想要自動(dòng)化針對(duì)不同渠道打不同包的過(guò)程,有兩種情況。一種是有源代碼的情況,一種是沒(méi)有源代碼只有APK文件的情況。

有源代碼的情況。

有源代碼的情況比較簡(jiǎn)單。我們可以使用自動(dòng)化腳本工具進(jìn)行打包,比如使用Ant。

使用Ant打包,有兩個(gè)關(guān)鍵問(wèn)題:一個(gè)是要在Ant中支持For循環(huán),以自動(dòng)做多次打包動(dòng)作;一個(gè)是如何能夠在Ant中修改Manifest文件,以支持不同的市場(chǎng)。只要解決了這兩個(gè)關(guān)鍵問(wèn)題,配合Ant的基本功能,就能實(shí)現(xiàn)我們的要求了。

在Ant中支持循環(huán)

在Ant的核心包里沒(méi)有相關(guān)的For循環(huán)的Task,要下載相應(yīng)的擴(kuò)展包??梢允褂瞄_源的Ant-contrib包。

下載地址:http://ant-contrib.sourceforge.net/

下載完成后,把a(bǔ)nt-contrib里的lib包復(fù)制到安裝好的Ant庫(kù)apache-ant-XXX\lib下面,就可以使用了。

具體如何使用,可以參考ant-contrib的官方網(wǎng)站。

在Ant中修改Manifest文件

利用 Ant 擴(kuò)展任務(wù)所提供的 <replaceRegExp> 任務(wù),還可以實(shí)現(xiàn)基于正則表達(dá)式的替換。

例如,要將AndroidManifest.xml文件中的行首“C_001”字符串替換為“C_002”,可以使用如下Ant腳本:

<replaceregexp

        file="AndroidManifest.xml"

        byline="true"

        match="C_001 "

        replace="C_002"

/>

<replaceRegExp> 任務(wù)很強(qiáng)大,這只是一個(gè)簡(jiǎn)單的例子。

只有APK文件的情況。

如果沒(méi)有源代碼,只有APK文件,事情相對(duì)就稍微復(fù)雜一些了。我們知道有一個(gè)開源的APKTOOL,可以對(duì)APK文件進(jìn)行反編譯,或者重新打包。具體的請(qǐng)參考APKTOOL的官方文件。

有了APKTOOL的幫助,就可以有一個(gè)基本思路。

 先使用APKTOOL對(duì)APK文件進(jìn)行反編譯,反編譯出來(lái)資源文件和AndroidManifest.xml文件。

 使用腳本代碼修改AndroidManifest.xml文件中的渠道ID文本。

 使用APKTOOL重新打包成APK文件。

 使用jarsigner工具為APK文件簽名。

只要反復(fù)重復(fù)2-4步驟,即可對(duì)不同的渠道打出不同的APK安裝包。

根據(jù)這個(gè)思路,具體的實(shí)現(xiàn)就相對(duì)簡(jiǎn)單了??梢詫懗梢粋€(gè)BAT腳本文件,也可以寫成Java應(yīng)用程序。

 

相關(guān)文章

  • Android編程實(shí)現(xiàn)EditText字?jǐn)?shù)監(jiān)聽并顯示的方法

    Android編程實(shí)現(xiàn)EditText字?jǐn)?shù)監(jiān)聽并顯示的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)EditText字?jǐn)?shù)監(jiān)聽并顯示的方法,涉及Android EditText文本框事件監(jiān)聽與響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • Android 通用型手電筒代碼

    Android 通用型手電筒代碼

    說(shuō)到手機(jī)手電筒功能,很多人都是直接調(diào)用閃光燈,而本文給大家介紹的是用相機(jī)功能來(lái)實(shí)現(xiàn)的,有需要的小伙伴可以參考下。
    2015-06-06
  • Android9.0上針對(duì)Toast的特殊處理圖文詳解

    Android9.0上針對(duì)Toast的特殊處理圖文詳解

    這篇文章主要給大家介紹了關(guān)于Android9.0上針對(duì)Toast的特殊處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Android View背景選擇器編寫技巧

    Android View背景選擇器編寫技巧

    本文主要介紹了Android View背景選擇器編寫技巧,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • android從系統(tǒng)圖庫(kù)中取圖片的實(shí)例代碼

    android從系統(tǒng)圖庫(kù)中取圖片的實(shí)例代碼

    這篇文章主要介紹了android從系統(tǒng)圖庫(kù)中取圖片的方法,涉及Android讀取及選擇圖片等相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Android自定義View之酷炫圓環(huán)(二)

    Android自定義View之酷炫圓環(huán)(二)

    這篇文章主要介紹了Android自定義View之酷炫圓環(huán),本文是第二篇針對(duì)Android圓環(huán)實(shí)現(xiàn)方法進(jìn)行的詳細(xì)闡述,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 超精準(zhǔn)的Android手機(jī)計(jì)步器開發(fā)

    超精準(zhǔn)的Android手機(jī)計(jì)步器開發(fā)

    這篇文章主要為大家詳細(xì)介紹了超精準(zhǔn)的Android手機(jī)計(jì)步器開發(fā)過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 一篇文章弄懂Android自定義viewgroup的相關(guān)難點(diǎn)

    一篇文章弄懂Android自定義viewgroup的相關(guān)難點(diǎn)

    這篇文章主要給大家介紹了關(guān)于如何通過(guò)一篇文章弄懂Android中自定義viewgroup的一些相關(guān)難點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • Android學(xué)習(xí)筆記--通過(guò)Application傳遞數(shù)據(jù)代碼示例

    Android學(xué)習(xí)筆記--通過(guò)Application傳遞數(shù)據(jù)代碼示例

    使用Application傳遞數(shù)據(jù)步驟如下:創(chuàng)建新class,取名MyApp,繼承android.app.Application父類,并在MyApp中定義需要保存的屬性
    2013-06-06
  • Android自定義流式布局的實(shí)現(xiàn)示例

    Android自定義流式布局的實(shí)現(xiàn)示例

    這篇文章主要介紹了Android自定義流式布局的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

汕尾市| 融水| 儋州市| 安陆市| 武清区| 大荔县| 太仆寺旗| 荣昌县| 怀来县| 天台县| 浠水县| 民乐县| 耿马| 桂林市| 什邡市| 抚松县| 宝丰县| 博白县| 蒙山县| 永昌县| 马龙县| 威信县| 巴中市| 郴州市| 永州市| 东阿县| 芜湖市| 鸡西市| 泰宁县| 安远县| 林西县| 德令哈市| 搜索| 麦盖提县| 三门县| 西贡区| 海南省| 宁陵县| 邢台市| 平塘县| 绥芬河市|