編輯:關於Android編程
為什麼需要在應用程序中增加渠道信息?
Android應用的發布需要面對各種各樣的市場,我們稱之為渠道。有的時候,我們需要知道應用是從哪個渠道下載的。比如,我們可能需要統計哪些市場帶來的用戶量比較大。再比如,我們可能有一些盈利需要和具體的渠道進行分成。這些都是統計渠道的信息。
一般如何在應用中加入渠道信息?
為了統計渠道信息,就不得不在程序的某個地方加入渠道的信息,然後針對不同的渠道打不同的包。一般可以在Manifest文件中加入渠道編號,而不直接寫在代碼中。這樣做的好處是,可以針對不同渠道,自動化去修改Manifest文件中的渠道編號,然後自動為該渠道打包。
Manifest文件支持Meta Data標簽,建議使用這種自定義標簽。例如下面的文件片段。
復制代碼 代碼如下:
<?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>
在這段代碼示例中,我們在Application節點下增加了一個meta-data標簽,名稱是CHANNEL,值是C_001,是我們規定的一個渠道的編號。
為不同的渠道打包,就要手工或者自動化修改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循環,以自動做多次打包動作;一個是如何能夠在Ant中修改Manifest文件,以支持不同的市場。只要解決了這兩個關鍵問題,配合Ant的基本功能,就能實現我們的要求了。
在Ant中支持循環
在Ant的核心包裡沒有相關的For循環的Task,要下載相應的擴展包。可以使用開源的Ant-contrib包。
下載地址:http://ant-contrib.sourceforge.net/
下載完成後,把ant-contrib裡的lib包復制到安裝好的Ant庫apache-ant-XXX\lib下面,就可以使用了。
具體如何使用,可以參考ant-contrib的官方網站。
在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的幫助,就可以有一個基本思路。
先使用APKTOOL對APK文件進行反編譯,反編譯出來資源文件和AndroidManifest.xml文件。
使用腳本代碼修改AndroidManifest.xml文件中的渠道ID文本。
使用APKTOOL重新打包成APK文件。
使用jarsigner工具為APK文件簽名。
只要反復重復2-4步驟,即可對不同的渠道打出不同的APK安裝包。
根據這個思路,具體的實現就相對簡單了。可以寫成一個BAT腳本文件,也可以寫成Java應用程序。
鍵盤監控 鍵盤監控,顧名思義是在應用軟件在運行時,用戶在設備上的一舉一動都將被詳細記錄下來,更多的實在使用者毫無覺察的情況下將屏幕內容以圖片的形式、按鍵內容以文本文檔的形
關於activity的生命周期:要知道的知識點1.每個生命活動執行的順序、2.每個生命周期我們應該做怎麼樣的處理:每個方法保留的時間有多久;那個方法是活動阻塞的,他沒有做
Intent簡介Android中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根
本文實例講述了Android實現圖片疊加效果的兩種方法。分享給大家供大家參考,具體如下:效果圖:第一種:第二種:第一種是通過canvas畫出來的效果:public voi
今天主要分析下ActivityManagerService(服務端) 與