免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1497 | 回复: 0
打印 上一主题 下一主题

探究 Android 系統應用程式的祕密 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-24 14:40 |只看该作者 |倒序浏览

Digging out the secret of Android preloaded applications
相信我,閱讀別人的原始程式碼,是你學寫程式最好的方式之一,尤其是原廠的原始程式碼。
其實 Google 為 Android 寫了不少範例程式,像是在 Android SDK 中,就有好幾個範例程式。還有
Google Open Source
中的
apps-for-android
,也是我推薦你必讀的範例程式之一。沒事時,翻閱一下,都會有新收穫。
不過,似乎還有些 Google 的不傳秘技,不在這些範例程式中。你得從他的一些系統原始程式中,才能學到。
我剛開始學 Android 時,就常被 res 中的 xml
搞得迷迷糊糊的,只敢用最簡單的功能。後來看多了系統的原始程式碼,發覺裡面有許多 SDK 文件中,沒有提到,或是語焉不詳的用法。像是在 xml
中,還可以用 selector, alpha, set, scale, translate, level-list 等 tags
。這些用法,在某些時候,還蠻好用的。而這用法的範例,在 Google 釋放 Android 原始程式前,你還是要用一些非常手段,才能拿到。
Google 預計在年底前,會釋放出 Android 原始程式。不過這釋放的範圍到那,在謎底未公布前,誰也說不準。說不定,那些
Google 寫的應用程式,如 Maps
,他有可能還是不會公開他的原始碼。在未公開原始程式碼前,我在這裡先公開,如何抓出這些系統應用程式的原始碼。你要注意的是, decompile
這些程式有可能會違反 Android SDK 授權條款,請勿任意散播你所 decompile 出來的檔案。(註:Android source code 已經在 2008/10/21 釋放出來,當初我猜的沒錯,像是 Maps 應用程式,com.google.android.maps package 的原始碼還是沒公開。)
在這,我以 Maps 這個應用程式為例。我曾在
Android 內部的祕密 - 系統目錄
中提到過,/system/app 目錄中,放的都是系統預先安裝的應用程式執行檔。首先,你先依照我在這篇提到的方法,到 /system/app
目錄中,將 Maps.apk 轉存到 Windows 的檔案目錄中。由於 .apk 檔是符合 zip 壓縮格式的。因此,接著將
Maps.apk 改名成 Maps.zip ,並用 WinZip 將檔案解壓縮,存到你自己的目錄中。
解開後,你應該會看到下面這些檔案及目錄:
classes.dex
resources.arsc
AndroidManifest.xml
[res]
  [drawable]
  [layout]
  [layout-land]
  [layout-port]
  [menu]
  [xml]
[META-INF]
classes.dex 就是 Java 編譯後的 classes 檔。目前還沒有工具可以直接將 .dex 檔轉成 .class 或
.java 格式,不過倒是有個 dexdump,可以幫你列印出 Java VM 的 machine code。有興趣的人,可參考
How to decompile .dex file on Android
,裡面有詳細的說明。
想要知道 Maps 這個程式,到底指定了那些 uses-permission,提供了那些 provider 的你,一定急著要打開 AndroidManifest.xml。有點失望吧!這是個二進位檔。別擔心,你可以用
axml2xml.pl

將他轉成一般的 xml 檔案格式。這個工具,用在 m5 之前的版本,都還正常。不過用在 1.0r1 上,我發覺 lauout/ 中 的 xml
檔,似乎轉出的結果有些問題。在網路上,有人說這二進位的 xml 檔,是 WBXML 格式。不過,我試了幾個 wbxml2xml
轉換工具,都不行。還是得等 axml2xml.pl 支援 1.0r1。
註:關於反解譯二進位 xml 檔的問題,已經有另一個解法。去
android4me
上下載 AXMLPrinter2.jar,接著在命令視窗上執行 java -jar AXMLPrinter2.jar binary_xml_file  ,binary_xml_file 就是在 lauout/ 中的二進位 xml 檔。
底下就是執行 axml2xml.pl 後的部份內容。

  
  
  
  
  
  
  ...
雖然,不能看到原來的 Java 程式碼。不過,另一個值得參考的是 res 這個目錄。相信我,那裡面有很多的寶藏可挖,看到好東西,別忘了分享出來。Enjoy!
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/85805/showart_1662856.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP