小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

為Android應用增加渠道信息 自動化不同渠道的打包過程

 命運之輪 2012-02-16

為什么需要在應用程序中增加渠道信息?

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

 

一般如何在應用中加入渠道信息?

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

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

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

<manifest xmlns:android="http://schemas./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>

在這段代碼示例中,我們在Application節(jié)點下增加了一個meta-data標簽,名稱是CHANNEL,值是C_001,是我們規(guī)定的一個渠道的編號。

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

 

程序如何讀取打包的渠道編號?

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

    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;

    }

 

如何自動化打包過程?

我們想要自動化針對不同渠道打不同包的過程,有兩種情況。一種是有源代碼的情況,一種是沒有源代碼只有APK文件的情況。

有源代碼的情況。

有源代碼的情況比較簡單。我們可以使用自動化腳本工具進行打包,比如使用Ant。

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

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

在Ant的核心包里沒有相關的For循環(huán)的Task,要下載相應的擴展包??梢允褂瞄_源的Ant-contrib包。

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

下載完成后,把ant-contrib里的lib包復制到安裝好的Ant庫apache-ant-XXX\lib下面,就可以使用了。

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

2. 在Ant中修改Manifest文件

    利用 Ant 擴展任務所提供的 <replaceRegExp> 任務,還可以實現基于正則表達式的替換。

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

<replaceregexp

        file="AndroidManifest.xml"

        byline="true"

        match="C_001 "

        replace="C_002"

/>

<replaceRegExp> 任務很強大,這只是一個簡單的例子。

 

只有APK文件的情況。

如果沒有源代碼,只有APK文件,事情相對就稍微復雜一些了。我們知道有一個開源的APKTOOL,可以對APK文件進行反編譯,或者重新打包。具體的請參考APKTOOL的官方文件。

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

1. 先使用APKTOOL對APK文件進行反編譯,反編譯出來資源文件和AndroidManifest.xml文件。

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

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

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

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

根據這個思路,具體的實現就相對簡單了??梢詫懗梢粋€BAT腳本文件,也可以寫成Java應用程序。

 

---------------------------------------------------------------------------
GL(arui319)
http://blog.csdn.net/arui319
<本文可以轉載,但是請保留以上作者信息。謝謝。>
---------------------------------------------------------------------------

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多