壹、關於apk程序的雙開
今天查郵件看到有人發郵件問我android下的阿裏旺旺怎麽雙開。經過我的中外查證,貌視同個apk程序沒有辦法運
行多個實例,也就是同壹個程序不能實現雙開;同時同個程序也不能被安裝二次,更進壹步扼殺了雙開的可能。於是那我唯壹能想到的是:改apk,讓
android系統認不出原版和改版是同壹個程序。那麽關鍵在哪裏?android又是憑什麽說這二個程序是相同的或不同的呢?網上壹找無果。不過,以前
搗鼓的時候有註意壹個問題,在 /data/data
文件夾下,這個地方會存在安裝的程序數據,每個文件夾是這個程序的包名,換句話說,android之所以能區分二個程序是不是相同或不同就是看它們的包名
(PS:包是java中的壹個編程概念)。
按照這種思路,要實現同壹個apk程序的“雙開”,我們可以把原程序的“包”給它改壹下。比如,原包是com.z4mod.z4root
是z4root程序的包名,那我們就把它改成 net.z4mod.z4root
這樣原版和改版就不在同壹個包下了,android就會認為它倆可沒關系,是二個程序,這樣就能同時安裝這二個程序,就能同時運行,就能實現“雙開”(這
種當然只能算是偽雙開)。
好吧,下面我就用我剛發布的 SD2Flash.apk 來演示這個“雙開”功能(至於妳想掛多個QQ、旺旺,我表示我不會再去深入研究“雙開”的問題,參考我這篇文章或許會有點啟發)。先帖個圖吧。
有人說了,妳這二個SD2Flash名字都不壹樣,不會是寫了二個程序來晃點人吧?這個我表示絕對不是,這個任務名稱也可以直接改,不過單改這種名稱是實現不了“雙開”的。詳細修改教程參考下文。
二、修改過程(僅供參考)
這裏用我的SD2Flash作為修改源,這個程序比較簡單,不過萬丈高樓平地起,我這個人又懶,我就在這裏只打個地基了,其它程序可能會復雜點,比如包含多個包,那改起來有夠麻煩的:
1、用Apktool反編譯SD2Flash.apk,假設得到反編譯目錄 SD2Flash
2、編輯 SD2Flash\AndroidManifest.xml,將:
package="mandarava.android"
改成:
package="mandaravb.android"
這樣壹改主要是為了讓改版程序的包名與原版程序的包名不壹致,android系統就會認為是二個程序,這樣就可以同時安裝原版和改版,實現“雙開”。(改的時候註意只稍微改個字母就行了,不要用添加或刪除字母的方式,這樣特別是針對.so的二進制修改有好處)
3、編輯 SD2Flash\res\values\strings.xml,將:
<string name="app_name">SD2Flash</string>
改成:
<string name="app_name">SD2Flash2</string>
這個是改程序名稱。這樣壹改主要是為了讓改版創建的桌面圖標不會覆蓋原版,因為如果快捷圖標的名稱相同後裝的會覆蓋先裝的。
4、接下來要將smali中所有包含有“mandarava/android/”的路徑全部改成“mandaravb/android/”,這樣與前面的改後的包名“mandaravb.android”相對應。這個用查找替換的方式,可以使用apk改之理快速替換。
另外,有些時候源代碼文件中還會出現類似 mandarava.android 的包名情況,這些也要註意修改得與 mandaravb.android
壹致。不過,SD2Flash 沒這麽復雜,沒有這種情況;還有是有些程序帶有.so文件的,如果也出現包關聯的話,也要註意修改。
5、最後將 SD2Flash\mandarava 文件夾改名為:mandaravb ,這樣與包名“mandaravb.android”也是保持壹致。
改完成之後編譯簽名安裝,會在桌面生成SD2Flash、SD2Flash2二個快捷圖標,分別運行它們就可以實現偽“雙開”。
我用的這個示例apk程序是很簡單的,所以改起來沒什麽麻煩,不過如果其它的程序可能會遇到其它更多情況,比如可能包含.so文件,再比如程序有多個
包名的情況等等,我比較懶,我只拋磚引玉;我也不知道哪位想改阿裏旺旺,我不去試了,如果妳想改可以參考我這邊的方法自己研究壹下。不過我表示,這會挺麻
煩,改的時候要細心!