2014年5月29日 星期四

[Android] 安裝NDK與使用JNI呼叫系統底層native的C C++程式 (Java call C)

http://j796160836.pixnet.net/blog/post/31583827
http://blog.csdn.net/cupidove/article/details/8024596
http://huenlil.pixnet.net/blog/post/23801824-%5B%E8%BD%89%5Dandroid-jni%E5%AF%A6%E4%BE%8B
http://blog.changyy.org/2011/07/android-android-ndk-native-development.html
http://magiclen.org/android-jni/

Android通過JNI調用驅動程序(完全解析實例)
http://blog.csdn.net/ok138ok/article/details/6317212
http://blog.csdn.net/ok138ok/article/details/6560875

javah command
javah  -o  com_myproject_MyActivity.h  -classpath  <android-sdk-location>/platforms/android-19/android.jar;myprojectDIR\bin\classes  com.myproject.MyActivity
          -classpath => class path
          -d <dir>    => output folder to store header file
          -o <file>   => output header file

[轉] APK文件完全破解(源碼可見)

Apk文件破解可見源碼

  1. 獲取apk的資‍源圖片

         直接用 WinRAR打開,res/drawable直接拖拽出來即可。

    2.獲取xml文件信息

    雖然能用WinRAR看到裡面的xml文件,但是xml是經過優化的,無法直接查看,需要使用apktool工具,下載地址:https://code.google.com/p/android-apktool/
下載apktool-1.3.1.tar.bz2和apktool-install-windows-2.2_r01-2.tar.bz2解壓到同一個目錄,然後把待破解的apk文件拷貝到同一目錄,DOS在cmd下進入apktool所在路徑,然後輸入apktool d "XXX1" "XXX2",XXX1指的是你要反編譯的apk文件,XXX2指的是反編譯後文件存放的路徑,
如:apktool d "C:\taobao.apk" "C:\taobao"

  3 .反編譯dex獲取Java源代碼
         Apktool工具只能反編譯成smali的中間代碼文件,這裡需要借助另外一個開源工具:dex2jar,下載地址:http://code.google.com/p/dex2jar/。這個工具不能直接翻譯成java文件,但是可以把dex文件轉換成jar文件,然後可以通過jad工具把jar文件反編譯成Java源文件,jd-gui下載地址:
http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip 。
  詳細步驟:
  解壓apk文件,直接拖拽(rar解壓軟件),找到classes.dex文件
  在cmd下進入dex2jar.bat所在路徑,
  然後輸入「dex2jar.bat XXX」,XXX指的是你要反編譯的apk中的classes.dex文件所在路徑及名稱(classes上面解壓得到),
  如:dex2jar.bat D:\classes.dex;
  這樣會生成一個jar文件,然後用jd-gui工具將jar文件反編譯成java文件,選擇保存所有,它會生成一個壓縮文件,所有的源碼都在這個壓縮文件中,解壓了就可以看到詳細的代碼了。很強大吧。

2014年5月28日 星期三

Android Build Process


0xlab

http://jserv.blogspot.tw/

中國通信網

http://tech.c114.net/

[轉] 傅里葉變換

http://zhuanlan.zhihu.com/wille/19759362
http://zhuanlan.zhihu.com/wille/19763231


我保證這篇文章和你以前看過的所有文章都不同,這是12年還在果殼的時候寫的,但是當時沒有來得及寫完就出國了……於是拖了兩年,嗯,我是拖延症患者……
這篇文章的核心思想就是:

要讓讀者在不看任何數學公式的情況下理解傅里葉分析。

傅里葉分析不僅僅是一個數學工具,更是一種可以徹底顛覆一個人以前世界觀的思維模式。但不幸的是,傅里葉分析的公式看起來太複雜了,所以很多大一新生上來就懵圈並從此對它深惡痛絕。老實說,這麼有意思的東西居然成了大學裡的殺手課程,不得不歸咎於編教材的人實在是太嚴肅了。(您把教材寫得好玩一點會死嗎?會死嗎?)所以我一直想寫一個有意思的文章來解釋傅里葉分析,有可能的話高中生都能看懂的那種。所以,不管讀到這裡的您從事何種工作,我保證您都能看懂,並且一定將體會到通過傅里葉分析看到世界另一個樣子時的快感。至於對於已經有一定基礎的朋友,也希望不要看到會的地方就急忙往後翻,仔細讀一定會有新的發現。
————以上是定場詩————
下面進入正題:
抱歉,還是要囉嗦一句:其實學習本來就不是易事,我寫這篇文章的初衷也是希望大家學習起來更加輕鬆,充滿樂趣。但是千萬!千萬不要把這篇文章收藏起來,或是存下地址,心裡想著:以後有時間再看。這樣的例子太多了,也許幾年後你都沒有再打開這個頁面。無論如何,耐下心,讀下去。這篇文章要比讀課本要輕鬆、開心得多……

一、嘛叫頻域

從我們出生,我們看到的世界都以時間貫穿,股票的走勢、人的身高、汽車的軌跡都會隨著時間發生改變。這種以時間作為參照來觀察動態世界的方法我們稱其為時域分析。而我們也想當然的認為,世間萬物都在隨著時間不停的改變,並且永遠不會靜止下來。但如果我告訴你,用另一種方法來觀察世界的話,你會發現世界是永恆不變的,你會不會覺得我瘋了?我沒有瘋,這個靜止的世界就叫做頻域。
先舉一個公式上並非很恰當,但意義上再貼切不過的例子:
在你的理解中,一段音樂是什麼呢?
這是我們對音樂最普遍的理解,一個隨著時間變化的震動。但我相信對於樂器小能手們來說,音樂更直觀的理解是這樣的:
好的!下課,同學們再見。
是的,其實這一段寫到這裡已經可以結束了。上圖是音樂在時域的樣子,而下圖則是音樂在頻域的樣子。所以頻域這一概念對大家都從不陌生,只是從來沒意識到而已。
現在我們可以回過頭來重新看看一開始那句痴人說夢般的話:世界是永恆的。
將以上兩圖簡化:
時域:
頻域:

在時域,我們觀察到鋼琴的琴弦一會上一會下的擺動,就如同一支股票的走勢;而在頻域,只有那一個永恆的音符。
所(前方高能!~~~~~~~~~~~非戰鬥人員退散~~~~~~~)
以(~~~~~~~~~~~~~~~前方高能預警~~~~~~~~~~~~~~前方高能~~~~~~~~)

你眼中看似落葉紛飛變化無常的世界,實際只是躺在上帝懷中一份早已譜好的樂章。

(眾人:雞湯滾出知乎!)
抱歉,這不是一句雞湯文,而是黑板上確鑿的公式:傅里葉同學告訴我們,任何週期函數,都可以看作是不同振幅,不同相位正弦波的疊加。在第一個例子裡我們可以理解為,利用對不同琴鍵不同力度,不同時間點的敲擊,可以組合出任何一首樂曲。
而貫穿時域與頻域的方法之一,就是傳中說的傅里葉分析。傅里葉分析可分為傅里葉級數(Fourier Serie)和傅里葉變換(Fourier Transformation),我們從簡單的開始談起。

二、傅里葉級數(Fourier Series)

還是舉個栗子並且有圖有真相才好理解。
如果我說我能用前面說的正弦曲線波疊加出一個帶90度角的矩形波來,你會相信嗎?你不會,就像當年的我一樣。但是看看下圖:
第一幅圖是一個鬱悶的正弦波cos(x)
第二幅圖是2個賣萌的正弦波的疊加cos(x)+a.cos(3x)
第三幅圖是4個發春的正弦波的疊加
第四幅圖是10個便秘的正弦波的疊加
隨著正弦波數量逐漸的增長,他們最終會疊加成一個標準的矩形,大家從中體會到了什麼道理?
(只要努力,彎的都能掰直!)
隨著疊加的遞增,所有正弦波中上升的部分逐漸讓原本緩慢增加的曲線不斷變陡,而所有正弦波中下降的部分又抵消了上升到最高處時繼續上升的部分使其變為水平線。一個矩形就這麼疊加而成了。但是要多少個正弦波疊加起來才能形成一個標準90度角的矩形波呢?不幸的告訴大家,答案是無窮多個。(上帝:我能讓你們猜著我?)
不僅僅是矩形,你能想到的任何波形都是可以如此方法用正弦波疊加起來的。這是沒有接觸過傅里葉分析的人在直覺上的第一個難點,但是一旦接受了這樣的設定,遊戲就開始有意思起來了。
還是上圖的正弦波累加成矩形波,我們換一個角度來看看:

在這幾幅圖中,最前面黑色的線就是所有正弦波疊加而成的總和,也就是越來越接近矩形波的那個圖形。而後面依不同顏色排列而成的正弦波就是組合為矩形波的各個份量。這些正弦波按照頻率從低到高從前向後排列開來,而每一個波的振幅都是不同的。一定有細心的讀者發現了,每兩個正弦波之間都還有一條直線,那並不是分割線,而是振幅為0的正弦波!也就是說,為了組成特殊的曲線,有些正弦波成分是不需要的。
這裡,不同頻率的正弦波我們成為頻率份量。
好了,關鍵的地方來了!!
如果我們把第一個頻率最低的頻率份量看作「1」,我們就有了構建頻域的最基本單元。
對於我們最常見的有理數軸,數字「1」就是有理數軸的基本單元。
(好吧,數學稱法為——基。在那個年代,這個字還沒有其他奇怪的解釋,後面還有正交基這樣的詞彙我會說嗎?)
時域的基本單元就是「1秒」,如果我們將一個角頻率為\omega_{0} 的正弦波cos(\omega_{0} t)看作基礎,那麼頻域的基本單元就是\omega_{0}
有了「1」,還要有「0」才能構成世界,那麼頻域的「0」是什麼呢?cos(0t)就是一個週期無限長的正弦波,也就是一條直線!所以在頻域,0頻率也被稱為直流份量,在傅里葉級數的疊加中,它僅僅影響全部波形相對於數軸整體向上或是向下而不改變波的形狀。
接下來,讓我們回到初中,回憶一下已經死去的八戒,啊不,已經死去的老師是怎麼定義正弦波的吧。

正弦波就是一個圓周運動在一條直線上的投影。所以頻域的基本單元也可以理解為一個始終在旋轉的圓
知乎不能傳動態圖真是太讓人惋惜了……
想看動圖的同學請戳這裡:
以及這裡:
點出去的朋友不要被wiki拐跑了,wiki寫的哪有這裡的文章這麼沒節操是不是。
介紹完了頻域的基本組成單元,我們就可以看一看一個矩形波,在頻域裡的另一個模樣了:
這是什麼奇怪的東西?
這就是矩形波在頻域的樣子,是不是完全認不出來了?教科書一般就給到這裡然後留給了讀者無窮的遐想,以及無窮的吐槽,其實教科書只要補一張圖就足夠了:頻域圖像,也就是俗稱的頻譜,就是——

再清楚一點:
可以發現,在頻譜中,偶數項的振幅都是0,也就對應了圖中的彩色直線。振幅為0的正弦波。
動圖請戳:
老實說,在我學傅里葉變換時,維基的這個圖還沒有出現,那時我就想到了這種表達方法,而且,後面還會加入維基沒有表示出來的另一個譜——相位譜。
但是在講相位譜之前,我們先回顧一下剛剛的這個例子究竟意味著什麼。記得前面說過的那句「世界是靜止的」嗎?估計好多人對這句話都已經吐槽半天了。想像一下,世界上每一個看似混亂的表象,實際都是一條時間軸上不規則的曲線,但實際這些曲線都是由這些無窮無盡的正弦波組成。我們看似不規律的事情反而是規律的正弦波在時域上的投影,而正弦波又是一個旋轉的圓在直線上的投影。那麼你的腦海中會產生一個什麼畫面呢?
我們眼中的世界就像皮影戲的大幕布,幕布的後面有無數的齒輪,大齒輪帶動小齒輪,小齒輪再帶動更小的。在最外面的小齒輪上有一個小人——那就是我們自己。我們只看到這個小人毫無規律的在幕布前表演,卻無法預測他下一步會去哪。而幕布後面的齒輪卻永遠一直那樣不停的旋轉,永不停歇。這樣說來有些宿命論的感覺。說實話,這種對人生的描繪是我一個朋友在我們都是高中生的時候感嘆的,當時想想似懂非懂,直到有一天我學到了傅里葉級數……
抱歉,還是沒寫完。但是我想堅持看到這裡的人已經很不容易了。我們都休息一下,下一講再繼續……

上一篇文章發出來之後,為了掐死我,大家真是很下工夫啊,有拿給姐姐看的,有拿給妹妹看的,還有拿給女朋友看的,就是為了聽到一句「完全看不懂啊」。幸虧我留了個心眼,不然就真的像標題配圖那樣了。我的文章題目是,如果看了這篇文章你「還」不懂就過來掐死我,潛台詞就是在你學了,但是沒學明白的情況下看了還是不懂,才過來掐死我。
另外,想跟很多人抱歉,因為評論太多了,時間有限,不能給每個人回覆,還望大家諒解。但是很感謝一直在評論區幫忙解答讀者問題的各位,就不一一@了。
這裡鄭重感謝大連海事大學的吳楠老師,一位學識淵博、備課縝密、但授課不拘一格的年輕教師!當時大三他教我通信原理,但是他先用了4結課幫我們複習了很多信號與系統的基本概念,那個用樂譜代表頻域的概念就是他講的,一下子讓我對這門課豁然開朗,才有了今天的這篇文章。
————————————今天的定場詩有點長——————————
下面繼續開始我們無節操的旅程:
上次的關鍵詞是:從側面看。這次的關鍵詞是:從下面看。
在第二課最開始,我想先回答很多人的一個問題:傅里葉分析究竟是干什麼用的?這段相對比較枯燥,已經知道了的同學可以直接跳到下一個分割線。
先說一個最直接的用途。無論聽廣播還是看電視,我們一定對一個詞不陌生——頻道。頻道頻道,就是頻率的通道,不同的頻道就是將不同的頻率作為一個通道來進行信息傳輸。下面大家嘗試一件事:
先在紙上畫一個sin(x),不一定標準,意思差不多就行。不是很難吧。
好,接下去畫一個sin(3x)+sin(5x)的圖形。
別說標準不標準了,曲線什麼時候上升什麼時候下降你都不一定畫的對吧?
好,畫不出來不要緊,我把sin(3x)+sin(5x)的曲線給你,但是前提是你不知道這個曲線的方程式,現在需要你把sin(5x)給我從圖裡拿出去,看看剩下的是什麼。這基本是不可能做到的。
但是在頻域呢?則簡單的很,無非就是幾條豎線而已。
所以很多在時域看似不可能做到的數學操作,在頻域相反很容易。這就是需要傅里葉變換的地方。尤其是從某條曲線中去除一些特定的頻率成分,這在工程上稱為濾波,是信號處理最重要的概念之一,只有在頻域才能輕鬆的做到。
再說一個更重要,但是稍微複雜一點的用途——求解微分方程。(這段有點難度,看不懂的可以直接跳過這段)微分方程的重要性不用我過多介紹了。各行各業都用的到。但是求解微分方程卻是一件相當麻煩的事情。因為除了要計算加減乘除,還要計算微分積分。而傅里葉變換則可以讓微分和積分在頻域中變為乘法和除法,大學數學瞬間變小學算術有沒有。
傅里葉分析當然還有其他更重要的用途,我們隨著講隨著提。
————————————————————————————————————
下面我們繼續說相位譜:
通過時域到頻域的變換,我們得到了一個從側面看的頻譜,但是這個頻譜並沒有包含時域中全部的信息。因為頻譜只代表每一個對應的正弦波的振幅是多少,而沒有提到相位。基礎的正弦波A.sin(wt+θ)中,振幅,頻率,相位缺一不可,不同相位決定了波的位置,所以對於頻域分析,僅僅有頻譜(振幅譜)是不夠的,我們還需要一個相位譜。那麼這個相位譜在哪呢?我們看下圖,這次為了避免圖片太混論,我們用7個波疊加的圖。
鑑於正弦波是週期的,我們需要設定一個用來標記正弦波位置的東西。在圖中就是那些小紅點。小紅點是距離頻率軸最近的波峰,而這個波峰所處的位置離頻率軸有多遠呢?為了看的更清楚,我們將紅色的點投影到下平面,投影點我們用粉色點來表示。當然,這些粉色的點只標註了波峰距離頻率軸的距離,並不是相位。
這裡需要糾正一個概念:時間差並不是相位差。如果將全部週期看作2Pi或者360度的話,相位差則是時間差在一個週期中所佔的比例。我們將時間差除週期再乘2Pi,就得到了相位差。
在完整的立體圖中,我們將投影得到的時間差依次除以所在頻率的週期,就得到了最下面的相位譜。所以,頻譜是從側面看,相位譜是從下面看。下次偷看女生裙底被發現的話,可以告訴她:「對不起,我只是想看看你的相位譜。」
注意到,相位譜中的相位除了0,就是Pi。因為cos(t+Pi)=-cos(t),所以實際上相位為Pi的波只是上下翻轉了而已。對於週期方波的傅里葉級數,這樣的相位譜已經是很簡單的了。另外值得注意的是,由於cos(t+2Pi)=cos(t),所以相位差是週期的,pi和3pi,5pi,7pi都是相同的相位。人為定義相位譜的值域為(-pi,pi],所以圖中的相位差均為Pi。
最後來一張大集合:


好了,你是不是覺得我們已經講完傅里葉級數了?
抱歉讓你失望了,以上我們講解的只是傅里葉級數的三角函數形式。接下去才是最究極的傅里葉級數——指數形式傅里葉級數。但是為了能更好的理解指數形式的傅里葉級數,我們還需要一個工具來幫忙——歐拉公式。
歐拉公式,以及指數形式的傅里葉級數,我們下一講再講。謝謝大家(鞠躬)。
—————————————————————————————————————
今天講的部分不多,但是我希望大家能夠理解,我也有自己的生活,留給知乎的時間並不多,但是我很喜歡在知乎與別人交流的過程。上一次的那些文章大家知道我當時寫了多久麼?四天,每天寫6小時那種,而且當時還是在假期。主要是圖太不好做了,有人問到作圖的方法,其實就是簡單的MATLAB+PHOTOSHOP,作圖的確是很費時間,但是我相信做出這些圖是值得的,因為我相信圖一定比文字更好理解。也希望可以將這些自己學習時的感受和經驗更完整的分享給需要的人。
所以請大家稍微有點耐心,我會認真把這個故事講完。也謝謝大家的理解和支持。

Android Tool List

安卓工具箱

本頁面下收集了一些常用的安卓刷機、ROOT、DIY和開發類工具。如果您有什麼好的工具推薦,歡迎在本頁面下留言,我會將其添加到本頁面下。

安卓ROOT工具

軟件名稱(點擊下載)軟件簡介
安卓adb工具包包含adb、fastboot安卓刷機root必備工具

安卓刷機工具

軟件名稱(點擊下載)軟件簡介
開機第一屏製作工具安卓手機開機第一屏製作工具,可以將自己喜歡的圖片設置為第一屏。
boot.img打包解壓boot.img,recovery.img打包解壓工具
flash_image開機狀態下刷recovery、boot的工具

安卓反編譯工具

軟件名稱(點擊下載)軟件簡介
jd-gui安卓java代碼反編譯工具
Android反編譯工具安卓界面化一鍵反編譯工具

安卓開發工具

軟件名稱(點擊下載)軟件簡介
Android Studiogoogle官方提供的安卓應用開發工具

安卓DIY工具

軟件名稱(點擊下載)軟件簡介
apk編輯器apk文件修改應用,可美化,漢化應用和製作多開應用
簽名工具signapk安卓簽名工具signapk可以對修改後的apk或rom卡刷包進項簽名

安卓其他工具

軟件名稱(點擊下載)軟件簡介
tcpdumpandroid中tcp數據包抓取工具
終端模擬器android中的終端模擬器,可執行shell命令
busyboxBusyBox就好像是個大工具箱,包含許多常用的Shell命令
yaffs2img瀏覽器瀏覽提取img內容,可以修改解壓img文件,常用來製作卡刷包。
BlueStacks一個可以讓Android 應用程序運行在Windows系統上的軟件
安卓http服務器lmp.tar.bz2可以在安卓手機上搭建一個http服務器環境

Android 簽名工具SignApk.jar使用教程

http://www.top139.com/diy/25.html


signapk工具可以實現對安卓ROM和安卓應用進行簽名。在安卓DIY與安卓ROM製作中作用是非常大的。可以使用其對經過自己DIY修改美化後的應用進行簽名或對製作好的安卓ROM卡刷包進行簽名。讓我們做出來的成果顯得更加正式一點。


SignApk.jar是一個已包含在Android平台源碼包中的工具。如果要使用SignApk.jar,你需要創建一個帶有對應證書/公鑰的私鑰。而你可以使用Openssl來創建私鑰/公鑰對。在本站的安卓工具箱頁面中已經為大家提供了打包好的SignApk.jar工具和測試使用的簽名文件,讓大家不用就為了使用signapk工具而去下載整個安卓開發平台。

需要注意的是在使用signapk工具前需要安裝java環境,安裝java環境可以在百度搜索jre,到相應的網站中去下載安裝,這裡就不作介紹了,下面為大家介紹一下signapk簽名工具的詳細使用方法。

使用方法:java -jar signapk.jar  platform.x509.pem platform.pk8 old.apk new.apk 執行後new.apk即為簽名後的文件。

其中platform.x509.pem替換為壓縮包中的testkey.x509.pem,platform.pk8替換為testkey.pk8。

之前我們說過signapk工具也可以對刷機rom卡刷包進行前面,同樣的我們也可以使用上面的方法對卡刷包進行簽名。我們只需要將上面的最後兩個參數修改下就可以了,將old.apk修改為卡刷包的文件名,如update.zip,將new.apk修改為簽名過後生成的文件名,如update_new.zip即可。

apktool反編譯工具使用詳解

http://zhangyan1158.blog.51cto.com/2487362/683234


 APKToolGOOGLE提供的APK編譯工具,需要JAVA運行環境,推薦使用JDK1.6或者JDK1.7
如果你想對APK文件進行修改,那麼就不可避免的要使用到APKTool論壇裡有很多關於ROM美化的帖子都需要自己動手修改APK文件,比如修改framework-res.apksystemUI.apk等等。
相信各位有不少人看了後都想親自來修改一番,但是結果卻是遇到了各式各樣的錯誤卻無法進行改正,甚至都不知道自己錯在哪裡。
一.APKTOOL使用環境配置
1.安裝JAVA設置環境變量。
下載安裝都很簡單,關鍵是安裝完後還需要親自設置環境變量以方便其他程序能夠條用JAVA
WIN7為例,在桌面上右鍵點擊計算機——>屬性——>高級系統設置——>環境變量——>在下邊的系統變量裡新建一個變量,變量名為JAVA_HOME,值為JAVA的安裝路徑,比如我的是H:\ProgramFiles\Java\jdk1.6.0_26
二.APKTool的安裝
1.其實這個談不上安裝,不過如果你願意的話可以把下載到的APKTOOL中的三個文件(aapt.exeapktool.batapktool.jar)解壓縮到你的Windows安裝目錄下,以方便使用Dos命令.
2.可能有些人下載的APKTOOL裡有個安裝的bat文件,並且有另外兩個方便使用的bat文件,在這裡我不推薦大家使用這些bat文件,雖然使用起來很方便(其實我並不覺得方便),但是如果出現錯誤不方便查看。
三.APKTool的使用
1.decode
該命令用於進行反編譯apk文件,一般用法為
apktool d <file.apk> <dir>
<file.apk>代表了要反編譯的apk文件的路徑,最好寫絕對路徑,比如C:\MusicPlayer.apk
<dir>代表了反編譯後的文件的存儲位置,比如C:\MusicPlayer
如果你給定的<dir>已經存在,那麼輸入完該命令後會提示你,並且無法執行,需要你重新修改命令加入-f指令
apktool d –f <file.apk> <dir>
這樣就會強行覆蓋已經存在的文件
2.build
該命令用於編譯修改好的文件,一般用法為
apktool b <dir>
這裡的<dir>就是剛才你反編譯時輸入的<dir>(如C:\MusicPlayer,輸入這行命令後,如果一切正常,你會發現C:\MusicPlayer內多了2文件夾builddist,其中分別存儲著編譯過程中逐個編譯的文件以及最終打包的apk文件。
3.install-framework
該命令用於為APKTool安裝特定的framework-res.apk文件,以方便進行反編譯一些與ROM相互依賴的APK文件。具體情況請看常見問題


四.常見問題
1.關於安裝和管理framework文件
一般來說,你在使用apktool進行反編譯前不需要做其他的事情,然而由於有的廠商,如HTC三星等,他們定製了framework文件並且在他們的系統應用中使用了這些文件,這時,為了能正常的反編譯這些apk文件,你就必須從你的設備中拷貝出framework文件並且安裝到apktool中。
舉一個例子,比如你想反編譯HTCHero這款手機中的HtcContacts.apk,當你嘗試反編譯的時候,你會得到以下錯誤信息。


  1. $ apktool d HtcContacts.apk 
  2. I: Loading resource table...
  3. I: Decoding resources...
  4. I: Loading resource table from file: /home/brutall/apktool/framework/1.apk
  5. W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542
  6. ...
  7. W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520
  8. Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.
複製代碼


這就是在通知你必須先安裝HTC定製的framework文件,事實上在修改一些三星的系統應用時也是如此。
以三星的設備來舉例,你需要複製兩個framework文件來進行安裝,framework-res.apktzframework-res.apk,一般來說,這兩個文件在手機中的位置應該是system\framework\
使用以下代碼進行安裝
apktool if C:\framework-res.apk
apktool if C:\tzframework-res.apk
這裡假設2個文件都放在C盤根目錄

2.直接用build編譯後在dist中找到的apk文件無法使用
其實這個問題我也不是特別理解,目前知道的就是,APK文件雖然本質是個zip文件,但是事實上zip包中的文件是按照兩種方式壓縮的,即XML文件進行deflate壓縮,其他文件不進行壓縮(使用store存儲),而直接編譯得到的APK文件對任何的文件都進行了deflate壓縮,因此你會發現編譯得到的文件比原文件小好多。
同樣的,當你使用build文件夾中的文件替換原apk文件中的資源時,請務必確認是使用store存儲還是deflate壓縮
3.其他錯誤
其實在編譯過程中會遇到很多其他的問題,大多數是由於刪除、修改、添加了資源後,沒有對應的修改res\values\public.xml文件而造成的,這裡我給大家說下修改的原則:
第一,public.xml文件中的資源不能重複定義。
第二,public.xml文件中的任意兩個資源的ID不能一樣
第三,public.xml文件中定義的資源必須能找到該文件(如果你刪除了一些文件,必須要對應的刪除public.xml中的該行)
第四,public.xml文件中儘可能全面(如果你添加了某資源,最好確保在public.xml中也添加)
第五,public.xml文件中的資源的ID儘可能連續(當你為添加的文件添加聲明時,賦予的ID儘可能是連續的)