歡迎轉載,同時請附上原文連接:http://www.cnblogs.com/tianxiaozz/archive/2012/12/26/change_apk_package_name.html html
今天,想在android手機上安裝兩個相同的應用,本覺得能夠安裝不一樣版本的,試了幾回,均相互覆蓋了,因而,只能設法修改apk所對應的包名(package name)。 java
目的聲明:本文只是爲了知足DIY的須要,並非爲了成爲打包黨,竊取別人的勞動成果,本文所涉及的工具也均爲開源的,僅供學習交流之用。 android
DIY前提:在國內的論壇裏,搜索了一下,找到了各類解包,打包的技術內容,以及各類漢化、去廣告的帖子,但這個並非本文的目的。之前見過打包黨不只修改了別人apk的廣告用來獲利,還將別人apk的包名修改了,因此有人早就實現了,但未能找到相關的技術文章,本文涉及的知識都仍是比較淺顯的,沒有深刻的研究底層緣由,也參考了網上幾個帖子。 web
PS:在國內論壇上,找一篇原創的帖子很難,基本都是轉載的,還不附原文連接,引入了的不少錯誤,想找到原文都很難,真是很悲劇。國內論壇裏,熱心人仍是少了點,不少問題都死了,無人回答,筆者嘗試在CSDN、ITEYE、EOE發過幾個帖子,但不多能解決問題,因而只能求助於國外論壇,這也是一個悲劇。 windows
這個問題解決完了,也很簡單,至少我這個比較簡單,我是想多安裝幾個QQ瀏覽器(有IT屌絲安裝了10個微信的,這個我表示很汗),基本過程以下: 瀏覽器
一、將apk解包成一個文件夾 微信
二、修改AndroidManifest.xml中對應的包名 編輯器
三、修改smali目錄下中的包 ide
四、將文件夾打包成apk 工具
五、將apk從新簽名
六、驗證apk的簽名
七、優化apk
八、安裝apk,並測試
基本前提條件:
一、java的環境
二、Eclipse及android的開發環境(這個主要是用來進行調試)
三、text文本編輯器,本人用的是UEdit,也能夠用相似的,主要是利用其查找及替換功能
參考文章:http://www.cnblogs.com/yshic/archive/2012/06/13/2547605.html
這篇文章主要用來反編譯apk獲得源碼,但google進行了反制,只能獲得一些可讀性不高的源碼,這裏主要是利用反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件.
參考文獻裏提到的apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip都可以從http//code.google.com/p/android-apktool/上下載,下載好以後,將涉及的命令行目錄及exe目錄添加到電腦的path路徑中,這樣就便於操做了,如檢測apktool是否能夠,能夠在命令行中輸入apktool,若是能夠識別就表示OK了。
參考了國內的技術文章後,有人發帖以上面的思路進行操做,但沒有發技術文章,因此筆者只能去國外論壇中逛逛了,在Stack Overflow中,找到了相關的帖子,有老外留言"you can't do this",這個的確有違技術道德,但這裏只作學習參考或交流。找到了一片帖子http://stackoverflow.com/questions/9218641/renaming-the-package-name-inside-an-apk,這篇帖子的回答給了比較詳細的步驟(如上),他的狀況比這個還稍微複雜點,簡化後就是我要的結果,我就是按照這個基本步驟來的,回答的英文比較好懂(頗有多是國人)。
下面就按照上面的步驟一步步操做:我是已QQ瀏覽器4.0版的apk來操做的。
一、個人apktool安裝到了E盤下的apktool目錄下,因此的操做也在這個目錄下進行 E:\apkTool
將apk複製到E:\apkTool目錄下,重命名爲qq4.0.apk(這個沒有要求,隨意就好)
將apk解包 命令行下cd到E:\apkTool這個目錄 apktool d qq4.o.apk qq4 將apk解包到qq4(這個也能夠隨意)這個目錄
E:\apkTool\qq4這個目錄下內容以下:
二、修改AndroidManifest.xml中的包名,
將package後面的包名com.tencent.qbx改成你想要的新包名,我改成了com.tianxiao.tencentweb
將涉及原包名的com.tencent.qbx的相關activity的聲明中的包名均改成新包名com.tianxiao.tencentweb
至於intent-filter裏面的action名中包含原包名的,則能夠不改,若是改的話,代碼中也要相應的改變
另外,若是有provider,provider的authorities也得改,這個在同一手機上必須惟一,不然安裝會失敗
三、在E:\apkTool\qq4\smali目錄下,有不少子目錄,子目錄下的文件多以smali結尾,這中文件的語法有點相似於彙編語言,具體原理就不深究了。
將smali目錄下的全部文件中的原包名的聲明形式com/tencent/qbx改成新包名com/tianxiao/tencentweb
具體以下,用UEdit在文件中替換便可,將目標目錄指向E:\apkTool\qq4\smali,這個將近1000條左右
若是以前改成action裏面的包名,也要將字符串形式的包名com.tencent.qbx改成com.tianxiao.tencentweb
若是有provider也要講原來的authorities值改成在AndroidManifest.xml中新改的authorities值。
四、將E:\apkTool\qq4從新打包爲apk
apktool b qq4 newqq.apk
五、將新的newqq.apk 從新簽名
簽名的方法不少,一主要是手動生成簽名,用命令行簽名
我採用的現成的,下載了一個Auto-sign的文件夾,進行了簽名,這個比較簡單,網上帖子不少,就不贅述。
新簽名後的apk名爲 newqq4signed.apk
六、驗證簽名 是否正確
jarsigner -verify -verbose -certs newqq4signed.apk
通常來講,沒問題,略過
七、優化apk
zipalign -v 4 newqq4signed.apk latestqq.apk 優化過的apk名爲latestqq.apk
八、安裝新的apk,驗證是否成功
這個最好把Eclipse打開,手機連上,查看logcat的安裝信息。
我嘗試了3次才成功,主要是忘了 provider的authorities的處理,
出錯信息以下: Can't install because provider name qbx_bookmarks (in package com.tianxiao.tencentweb) is already used by com.tencent.qbx
緣由很清楚,因此debug仍是至關給力的,原來不喜歡debug,看debug過程能夠更好的瞭解執行過程。
在進行了測試後,筆者有屢次重複了2-8這幾個步驟,共獲得了4個新的apk,安裝後的結果以下圖:
如圖,QQ4.0的瀏覽器,原裝的裝了一個,從新打包的有4個,預期目標達到了。
本次嘗試成功了,花了很多時間查資料,基本原理至關的清楚,本文中筆者儘量不產生歧義,歡迎各位交流和批評。
歡迎轉載,同時請附上原文連接:http://www.cnblogs.com/tianxiaozz/archive/2012/12/26/change_apk_package_name.html