
這篇文章目的在于介紹Android系統上控制權限的方法,讀者只要使用過(guò)Android,或是對智能機平臺有所了解,就能看懂,不需要專(zhuān)門(mén)的編程知識。
1 為什么Android總是事無(wú)巨細地告訴你應用索取的每一項權限?
相比Apple,Microsoft嚴格控制生態(tài)系統(從蘋(píng)果給開(kāi)發(fā)者的"App Store Guideline"可見(jiàn)一斑),只允許通過(guò)官方應用商店安裝應用,并對每份上傳進(jìn)行仔細地審查而言,Android的開(kāi)放就意味著(zhù),Google需要向用戶(hù)提供一系列用于為自己負責的流程、工具。所以在安裝應用前,Android總是要事無(wú)巨細地告訴你,應用肯需要控制什么權限。
同樣,開(kāi)發(fā)者也制作了一系列易用的工具,用以鑒別可疑的應用程序,或是控制權限。

圖1 Android 官方市場(chǎng)會(huì )強制提醒用
Andoird哪里開(kāi)放了?
在A(yíng)ndroid中,用戶(hù)能自由從本地安裝應用,自由地對SD卡進(jìn)行操作,自由選擇應用市場(chǎng)。
如果愿意放棄保修,用戶(hù)還能輕易地實(shí)行root,解鎖基帶(baseband)。只有一些產(chǎn)品會(huì )嚴密地鎖定bootloader(如摩托羅拉)。
最重要的是,因為ASOP(Android源代碼開(kāi)放計劃)的存在,絕大部分的Android代碼都是開(kāi)源的,開(kāi)發(fā)者可以由此對Android系統進(jìn)行深入的修改,甚至可以自行編寫(xiě)一個(gè)符合Android規范的系統實(shí)例(如Cyanogen Mod)。正是因為ASOP,這篇文章才可能介紹多達5種原理不同的權限控制方法。

圖2 Android開(kāi)源計劃的標志
開(kāi)放的風(fēng)險
不考慮Symbian,Windows Phone 6.5(及以下)平臺,那么幾乎所有的智能手機病毒都是Android平臺的,甚至官方Android Market也鬧過(guò)幾次烏龍。在國內水貨橫行的市場(chǎng),情況更是火上澆油,不法業(yè)者可以在手機的ROM,甚至是bootloader中做好手腳,讓用戶(hù)有病無(wú)法醫。
在A(yíng)ndroid中,用戶(hù)可以允許系統安裝來(lái)自"未知源"(也就是非Google官方的,或手機預置市場(chǎng)的)應用程序。于是,移動(dòng)平臺最重要的門(mén)神------數字簽名就被繞過(guò)了。

圖3 Android 允許未知安裝未知來(lái)源的應用程
出于A(yíng)ndroid的開(kāi)放性,也有不允許"未知源"的反例:亞馬遜的Kindle Fire平板使用了深度定制的Android,它只允許安裝來(lái)自亞馬遜官方商店的應用程序。

圖4 亞馬遜的 Kindle Fire 僅允許通過(guò)自帶的市場(chǎng)安裝應用
2 Android有哪些"權限"
首先需要明確一下Android中的種種"權限"。Android是在Linux內核上建立一個(gè)硬件抽象層(Android HAL),通過(guò)Dalvik以及各種庫來(lái)執行android應用的。在手機啟動(dòng)時(shí),首先需要由Bootloader(HTC手機上稱(chēng)作Hboot)引導Linux及手機上各個(gè)硬件設備的驅動(dòng)程序,之后才啟動(dòng)Android系統。所以其實(shí)我們會(huì )涉及到四種不同涵義的權限:
Android權限(Permission)
這指Android中的一系列"Android.Permission.*"對象,是本文的中心內容。
Google在A(yíng)ndroid框架內把各種對象(包括設備上的各類(lèi)數據,傳感器,撥打電話(huà),發(fā)送信息,控制別的應用程序等)的訪(fǎng)問(wèn)權限進(jìn)行了詳細的劃分,列出了約一百條"Android.Permission"。應用程序在運行前必須向Android系統聲明它將會(huì )用到的權限,否則Android將會(huì )拒絕該應用程序訪(fǎng)問(wèn)通過(guò)該"Permission"許可的內容。
比方說(shuō),搜狗輸入法提供了一個(gè)智能通訊錄的功能,用戶(hù)可以在輸入聯(lián)系人拼音的前幾個(gè)字符,或首字母,輸入法就能自動(dòng)呈現相關(guān)聯(lián)系人的名字。為了實(shí)現這個(gè)功能,輸入法必須聲明它需要讀取手機中聯(lián)系人的能力,也就是在相關(guān)代碼中加上聲明"android.permission.READ_CONTACTS"對象。

圖5 搜狗輸入法的智能聯(lián)系人功能
原生Android只提供了對"一刀切"式的管理,要么同意使用,否則就根本就不安裝應用程序。當用戶(hù)遇到希望使用程序的同時(shí),又想禁止部分Permission的場(chǎng)合,他就無(wú)路可走。
于是,不少開(kāi)發(fā)者就搗鼓出了"第三條道路";可惜的是,沒(méi)有一種方法能同時(shí)做到既不需要將手機固件Root,又完全不涉及對原始應用程序進(jìn)行反向工程的方法。
Root
Root指獲得Android所在的Linux系統的Root(根)權限,有了根權限,你才能對Linux做出任意的修改。iOS中的越獄(Jailbreak) 相當于獲得iOS系統的Root權限(iOS是一種類(lèi)Unix系統,和Linux都使用Root的概念)。在已Root的設備中,通常都是使用一個(gè)叫"Superuser"(簡(jiǎn)稱(chēng)SU)的應用程序來(lái)向許可的程序授以Root權限。
Bootloader的解鎖(Unlock)
利用數字簽名,Bootloader可以限定只有正確簽名的系統可以被引導。在修改固件以獲得Root以前,解鎖Bootloader通常是必須的。安裝第三方修改、編譯的固件也需要解鎖Bootloader。
基帶(Radio)解鎖
在A(yíng)ndroid系統中,基帶是上層軟件與手機中無(wú)線(xiàn)設備(手機網(wǎng)絡(luò ),Wi-Fi,藍牙等)的驅動(dòng)程序之間的中介。國外的網(wǎng)絡(luò )運營(yíng)商很喜歡鎖定基帶,從而保證用戶(hù)只能使用運營(yíng)商自己指定的sim卡。在我國,鎖定基帶是非法的,手機制造商、網(wǎng)絡(luò )運營(yíng)商也不可以通過(guò)鎖定基帶的方法對待違約客戶(hù)。iOS的"解鎖"就是解鎖iOS中的基帶軟件。
為什么要控制Android權限
魚(yú)和熊掌不可兼得,Android的世界有很多自由,壞人也能自由地做壞事。它的生態(tài)系統很強調自主:用戶(hù)可以自主地減小風(fēng)險,僅使用官方市場(chǎng)的應用程序,也可以自主地解除安全限制,從而獲得更多自由。因此,在遇到壞事的時(shí)候,用戶(hù)也不得不自主一下:
1, 抵制不道德,乃至非法行為
幾乎所有的Android安全軟件都能對來(lái)電、信息進(jìn)行控制,以減少騷擾。
另一方面,很多應用都會(huì )要求它們實(shí)際功能以外的權限,表現在非(主動(dòng))告知地搜集設備序列號,位置信息,誘使用戶(hù)默認地上傳聯(lián)系人列表等方面。
更壞一點(diǎn)的應用程序,則會(huì )踏入犯罪的范疇,比如能偷偷發(fā)出扣費信息,或是作為黑客的偷窺工具。
2, 減少惡意軟件的損害
惡意軟件即便潛伏成功,也難以獲得權限,從而減少損失。
3, 用戶(hù)有權自主地在抑制應用程序的部分權限時(shí),繼續使用該應用程序,而只承擔由于自行設置不當而帶來(lái)的后果。
用戶(hù)擁有設備的所有權,因此有權自主控制設備上的內容、傳感器等對象的訪(fǎng)問(wèn);同時(shí)有權(不)運行,(不)編譯設備上的應用程序。
大多數應用程序在運行時(shí),并未達成主動(dòng)告知的義務(wù),是失誤;然而即使主動(dòng)告知,用戶(hù)還是可以不理會(huì )。
為什么Android官方市場(chǎng)的強制提醒權限的行為不屬于主動(dòng)告知:
通過(guò)Android官方市場(chǎng),"打包安裝器"安裝應用程序時(shí),所顯示的"權限"僅是在安裝包內AndroidManifest.xml聲明的值,而非應用程序實(shí)際上會(huì )調用的內容。該值僅用來(lái)表明Android系統能向應用授予的最大可能的權限。即便一個(gè)"Hello World"式的應用程序,也可以在A(yíng)ndroidManifest.xml中聲明所有可能的Android Permission。
這就是說(shuō),在A(yíng)ndroidManifest.xml中聲明的值與應用程序實(shí)際調用的權限有關(guān)聯(lián),但不等同,且這種提示是由Android系統負責實(shí)施的強制行為。
正確的理解是:"應用程序(被迫地)讓Android系統告知用戶(hù),它在A(yíng)ndroidManifest.xml中所聲明的事項。"
這意味著(zhù)應用程序在使用重要權限前,依然需要自行、主動(dòng)地通知用戶(hù)相關(guān)事宜。

圖6 應用程序須要AndroidManifest.xml中聲明調用到的權限
然而,即便只是讓一半的應用程序達到以上的標準,也是不可能的。應用程序需要通過(guò)收集用戶(hù)信息,程序的錯誤日志。從而統計用戶(hù)的喜好,改進(jìn)程序。另一方面,這也是發(fā)送精確廣告但不追溯到用戶(hù)身份信息的方式,這一點(diǎn)對于免費應用而言,是極其重要的。我們之所以能知道不同型號手機的占有率,應用軟件的流行度,是與這樣的統計不可分離的。
一旦每個(gè)應用程序都專(zhuān)業(yè)地主動(dòng)發(fā)出提醒,不專(zhuān)業(yè)的用戶(hù)(大多數用戶(hù)都是不專(zhuān)業(yè)的)通常會(huì )將之視為如同海嘯警報一般的危機。
這么做對誰(shuí)都沒(méi)有好處------用戶(hù)方的隱私權是毋庸置疑的,然而應用程序方面的獲取信息記錄的需求也是無(wú)可阻擋的。如果每個(gè)用戶(hù)都打算阻止,只會(huì )落得被迫接受不平等條約的下場(chǎng),在溫飽以前,不會(huì )有人考慮小康的問(wèn)題。
于是,現狀就變得有趣:用戶(hù)人享受著(zhù)相同的服務(wù);其中大部分用戶(hù)出于不知情/好意,默默地向開(kāi)發(fā)者、廣告商提供了信息,剩下的少數用戶(hù)則能阻斷這種勞務(wù)。而作為維持Android平臺的信息商人Google,只確保在它的地盤(pán)里,不會(huì )發(fā)生觸碰底線(xiàn)的事情。
一句話(huà)總結:
設備是我的,不管你怎么說(shuō),反正我說(shuō)了算,但我說(shuō)的話(huà)大多是不算數的。
3 權限控制的方法
這里開(kāi)始介紹各種控制Android權限的辦法??上У氖?,幾乎所有的手段都需要對設備進(jìn)行Root,如果不這么做,則需要付出不小代價(jià)。
App Shield(國內常見(jiàn)的名字:權限修改器)
它是一個(gè)需要付費的Android應用,其原理是修改應用程序的apk安裝包,刪除其中AndroidManifest.xml文件內,用于聲明權限的對應"Android.Permission.*"條目,然后再用一個(gè)公開(kāi)的證書(shū)對安裝包重新簽名(需要允許"未知源"),這樣一來(lái),應用程序就不會(huì )向系統申請原先所需的權限。當應用運行至相應的流程時(shí),系統將直接拒絕,從而達到用戶(hù)控制權限的目的。
對于已安裝的應用,AppShield也會(huì )按照同樣方法制作好apk安裝包,然后讓用戶(hù)先卸載原始的應用,再安裝調整過(guò)的應用。除了該應用數字簽名外,用戶(hù)可以隨時(shí)通過(guò)執行同樣的流程,將吊銷(xiāo)的權限恢復。

圖7 AppShield
Apk文件的結構
Android應用都是打包成以.apk擴展名結尾,實(shí)際上是zip的文件格式。
一個(gè)合法的apk至少需要這些成分:
根目錄下的"AndroidManifest.xml"文件,用以向Android系統聲明所需Android權限等運行應用所需的條件。
根目錄下的classes.dex(dex指Dalvik Exceptionable),應用(application)本身的可執行文件(Dalvik字節碼) 。
根目錄下的res目錄,包含應用的界面設定。(如果僅是一個(gè)后臺執行的"service"對象,則不必需)
Apk根目錄下的META-INF目錄也是必須的,它用以存放應用作者的公鑰證書(shū)與應用的數字簽名。
當應用被安裝后,這個(gè)apk文件會(huì )原封不動(dòng)地移至設備的data/app目錄下,實(shí)際運行的,則是Dalvik將其中Classes.dex進(jìn)行編譯后的Classes.odex(存放在Dalvik緩存中,刷機時(shí)的'cache wipe就是清除Dalvik的odex文件緩存')。
優(yōu)點(diǎn):
完全不需要Root,適用于所有版本的Android設備。不會(huì )損壞系統,可以吊銷(xiāo)任意一項Android權限。
問(wèn)題:
1,需要重新安裝應用,該行為可能會(huì )丟失應用的配置、歷史記錄。
2,執行權限吊銷(xiāo)的應用的數字簽名會(huì )被更改,無(wú)法直接更新。對于那些設計不良(沒(méi)有意料到'不聲明權限'情況的),或有額外自校驗的應用,可能會(huì )無(wú)法運行。
3,無(wú)法用于設備上的預裝應用,除非制造商好心地將該應用設置為"可以刪除"的狀態(tài)。
4,這個(gè)方法修改了apk包中的內容------盡管實(shí)際上AndroidManifest.xml和數字簽名并不算是應用程序的本身,但修改它們可能引發(fā)著(zhù)作權的問(wèn)題。
5,需要開(kāi)啟"未知源"。
6,這是一個(gè)收費應用。
CyanogenMod 7.1(及以上版本)
Cyanogenmod是一款著(zhù)名的第三方編寫(xiě)的開(kāi)源Android ROM。
CM7.1加入了控制權限的開(kāi)關(guān),官方的名稱(chēng)是"Permission Revoking",任何非系統/保護應用在安裝后,可直接吊銷(xiāo)任意一項權限,其效果等價(jià)于直接刪除apk包中AndroidManifest.xml的對應條目,但不會(huì )引發(fā)自校驗的問(wèn)題。CM的權限工具的作用等同于A(yíng)ppShield,無(wú)非是在A(yíng)ndroid自身的權限系統中添加了一個(gè)開(kāi)關(guān)。

圖8 Cyanogen Mod 7.1中的權限吊銷(xiāo)(Permission Revoking)設定
優(yōu)點(diǎn):
免費,使用簡(jiǎn)便,可隨時(shí),任意地吊銷(xiāo)、恢復非預裝應用的任意一項權限;不存在數字簽名的問(wèn)題,因而不影響使用自校驗的應用程序。
問(wèn)題:
此功能僅在Cyanogen Mod 7.1及以上版本提供,無(wú)法用于其它rom。因為是由Android系統出面吊銷(xiāo)權限,其實(shí)現原理與App Shield完全相同,同樣的,應用程序會(huì )因為設計不良而出現崩潰。
Permission Denied
這是可以吊銷(xiāo)任意Android應用(注意,不當地吊銷(xiāo)系統應用的權限可能會(huì )導致手機固件損壞,無(wú)法啟動(dòng))的任意權限,對權限的修改在重啟后生效。
實(shí)現原理應該與Cyanogen Mod 7.1+完全相同,適用于任何已經(jīng)Root的系統,因為一般的Android系統雖然事實(shí)上支持權限吊銷(xiāo),但沒(méi)有像Cyanogen Mod那樣放置接口,因此需要重啟后才能應用權限配置。同樣也有系統出面拒絕權限而導致的崩潰現象。

圖9 Permission Denied免費版吊銷(xiāo)應用程序權限的場(chǎng)景
優(yōu)點(diǎn):
效果與Cyanogen Mod中的權限吊銷(xiāo)效果一致,且可吊銷(xiāo)系統應用的權限。同時(shí)提供了免費與收費版本,免費版并沒(méi)有基本功能的缺失。適用于所有版本號不低于1.6的Android設備。
問(wèn)題:
調整后的權限需要重啟才能生效。設計不良的應用會(huì )崩潰。不恰當的權限修改會(huì )損壞系統,導致無(wú)法開(kāi)機。
PDroid
PDroid實(shí)際上是一個(gè)Android內核補丁加上一個(gè)用于管理的外部應用。補丁需要在Recover環(huán)境中刷入系統,也可以由開(kāi)發(fā)者自行移植入系統。該軟件在A(yíng)ndroid ASOP 2.3.4代碼基礎上開(kāi)發(fā),僅適用于沒(méi)有改動(dòng)內核的Android 2.3系統,目前還未支持Android 4。

圖10 PDroid的界面
為了避免Cyanogen Mod 7.1+權限吊銷(xiāo)(Permission revoking)導致的崩潰問(wèn)題,以及后臺服務(wù)(如LBE,QQ手機管家等,PDroid的作者認為通過(guò)后臺服務(wù)攔截權限并不是好辦法),PDroid并不阻止應用程序聲明權限,但會(huì )在其實(shí)際索取相關(guān)信息時(shí),予以阻止。通俗地說(shuō),就是簽署協(xié)議但不執行。在PDroid的用戶(hù)界面,用戶(hù)能隨時(shí)精確地控制涉及隱私的各項權限。對于某些內容,除了阻止外,用戶(hù)還可以偽造一個(gè)隨機或指定的數據。
可控制的內容包括:
IMEI(可偽造)
IMSI(可偽造)
SIM卡序列號(可偽造)
手機號碼(可偽造)
來(lái),去電號碼
SIM卡信息
當前蜂窩網(wǎng)絡(luò )信息
(以上七者均來(lái)自Android.Permission.READ_PHONE_STATE)
GPS定位信息 (可偽造,來(lái)自Android.Permission.FINE_LOCATION)
基站定位 (可偽造,來(lái)自Android.Permission.COARSE_LOCATION)
系統自帶瀏覽器的歷史,書(shū)簽(Android.Permission.BOOKMARKS)
聯(lián)系人 (android.permission.READ_CONTACTS)
通話(huà)記錄 (android.permission.READ_CONTACTS)
系統日志 (android.permission.READ_LOGS)
當前賬戶(hù)列表 (android.permission.GET_ACCOUNTS)
當前賬戶(hù)的授權碼 (android.permission.USE_CREDENTIALS)
短信,彩信 (可能與這5個(gè)權限有關(guān))
android.permission.READ_SMS
android.permission.RECEIVE_SMS
android.permission.SEND_SMS
android.permission.WRITE_SMS
android.permission.RECEIVE_MMS
日歷 android.permission.READ_CALENDAR
PDroid的內核補丁并不通用,每一個(gè)Rom都需要特定的補丁。開(kāi)發(fā)者除了提供了幾個(gè)特定機型下Cyanogen Mod,HTC Sense修改版ROM的專(zhuān)用補丁外,還推出了一個(gè)補丁生成工具(PDroid Patcher),用戶(hù)可以給自己的ROM生成專(zhuān)用的內核補丁。使用該Patcher需要安裝JDK(java Development Kit)。
優(yōu)點(diǎn):
PDroid避免了通過(guò)Android系統進(jìn)行權限吊銷(xiāo)的導致的潛在崩潰問(wèn)題,也不需要后臺服務(wù)。對隱私信息的控制是最精細的。盡管設備必須Root,但應用本身不需要Root權限。
問(wèn)題:
安裝過(guò)程是最繁瑣,最不可靠的,容易導致ROM損壞,適用范圍也小,需要用戶(hù)有相當的技能(能安裝JDK,會(huì )刷機)才可使用;只提供對隱私有關(guān)權限的控制,不提供網(wǎng)絡(luò )訪(fǎng)問(wèn),的控制。以這些為代價(jià),它幾乎沒(méi)有其它缺點(diǎn)。
LBE安全大師
實(shí)際上最常用的是以L(fǎng)BE為代表的通過(guò)一個(gè)Root權限的后臺服務(wù)來(lái)攔截相關(guān)行為的工具。除了LBE外,還有QQ手機管家等應用。這里以L(fǎng)BE安全大師為例介紹。

圖11 LBE安全大師
LBE是國內一個(gè)叫"LBE安全小組"開(kāi)發(fā)的工具,支持Android2.0~4.0。它的核心功能是像殺毒軟件一般,通過(guò)一個(gè)需要Root權限的后臺服務(wù),劫持所有調用權限的行為,并放行用戶(hù)許可的部分(其官方宣傳為'API級別攔截')。它和PDroid一樣幾乎不會(huì )引發(fā)應用程序崩潰,它支持攔截幾個(gè)涉及用戶(hù)的關(guān)鍵權限(LBE手機管家3.1/3.2):
讀取短信 (android.permission.READ_CONTACTS)
聯(lián)系人記錄 (android.permission.READ_CONTACTS)
通話(huà)記錄 (android.permission.READ_CONTACTS)
定位 (Android.Permission.COARSE_LOCATION
Android.Permission.FINE_LOCATION)
手機識別碼 (與Android.Permission.READ_PHONE_STATE有關(guān))
通話(huà)狀態(tài) (與Android.Permission.READ_PHONE_STATE有關(guān))
發(fā)送短信(具體原理不明,同樣類(lèi)似于禁止這五個(gè)權限
android.permission.READ_SMS
android.permission.RECEIVE_SMS
android.permission.SEND_SMS
android.permission.WRITE_SMS
android.permission.RECEIVE_MMS)
撥打電話(huà) (android.permission.CALL_PHONE)
通話(huà)監聽(tīng) (android.permission.PROCESS_OUTGOING_CALLS)
除此以外,LBE還可以分別控制應用在Wifi,手機網(wǎng)絡(luò )的聯(lián)網(wǎng)權限,其原理是依靠IPtables防火墻,而非通過(guò)Android的"Internet"權限。
此外LBE手機管家還提供基于智能內容審查的短信攔截、來(lái)電歸屬地顯示,以及禁用系統(保護)應用,進(jìn)程管理,殺毒等功能。
LBE提供兩個(gè)版本,一個(gè)叫"LBE安全大師",是一個(gè)全面的手機管家類(lèi)應用,更新比較頻繁,另一個(gè)版本(LBE手機隱私衛士,LBE Security lite)僅提供權限方面的管理。
考慮到主要市場(chǎng)在國內,LBE的發(fā)行策略看上去有些奇怪,它在Google的官方市場(chǎng)并不發(fā)行最新版。通常只能只能在LBE的官方網(wǎng)頁(yè),以及國內的應用市場(chǎng)獲得最新版本。
優(yōu)點(diǎn):
使用非常簡(jiǎn)單,功能強大而全面,風(fēng)險很小,可以控制系統應用。適用范圍廣,有很多替代產(chǎn)品。
問(wèn)題:
需要后臺服務(wù) (盡管蠶豆網(wǎng)有個(gè)評測,認為它對能耗幾乎沒(méi)有影響),不能控制所有的Android權限。
4 自啟動(dòng)的控制
Android對后臺服務(wù)有著(zhù)最好的支持。
在A(yíng)ndroid中可以自由地開(kāi)發(fā)一種稱(chēng)為'Service'的后臺運行的對象,加上沒(méi)有蘋(píng)果公司對應用程序的嚴格限制。諸如QQ掛機,即時(shí)調用第三方應用程序之類(lèi)的形式都可以輕易實(shí)現。
為了全面支持后臺服務(wù),也為了適應移動(dòng)設備資源緊張,不得不經(jīng)常清理內存的問(wèn)題,應用可在系統中設置觸發(fā)器,當系統發(fā)生了某個(gè)特定特定事件時(shí)(系統啟動(dòng),撥打電話(huà),收發(fā)信息,安裝、卸載應用,插上電源等,或應用程序自行定義的事件),就會(huì )觸發(fā)啟動(dòng)應用程序。
AutoStarts 自啟動(dòng)管理
AutoStarts是一個(gè)收費應用,通過(guò)它,用戶(hù)能了解系統中每一項程序會(huì )在什么場(chǎng)合下被觸發(fā)運行。如果提供Root權限,則還能禁止這樣的行為。
這里以Google Maps應用6.2版為例。默認情況下,這款應用總是會(huì )保持后臺運行,并每小時(shí)向Google發(fā)送一次當前用戶(hù)的位置信息。為了阻止這樣的行為,需要聯(lián)合使用AutoStarts與任意一款進(jìn)程管理應用:在A(yíng)utoStarts中,阻止Google Maps的自行啟動(dòng)(如圖),在每次使用完后,把Google Maps的進(jìn)程殺掉。

圖12 AutoStarts可以對自啟動(dòng)項目進(jìn)行修改
5 其他
Root帶來(lái)的風(fēng)險
有一個(gè)鉆牛角尖的說(shuō)法認為,一旦對設備進(jìn)行了Root,便無(wú)安全一說(shuō),只要惡意程序一旦偷偷獲得Root級別,一切都是空談。
這種說(shuō)法之所以鉆牛角尖,是因為:一方面Android中的Root權限通常都是需要用戶(hù)通過(guò)Superuser應用進(jìn)行授權的,這已經(jīng)夠用,雖然不能指望Superuser無(wú)懈可擊;另一方面,控制Android權限主要是為了讓?xiě)贸绦蛟?灰色地帶"的行為收斂一些,它們實(shí)際顯然不是病毒等犯罪軟件。
著(zhù)作權的問(wèn)題 (作者不是法律方面的專(zhuān)家,以下言論僅供參考)
我們知道,Android中的應用程序是基于Java語(yǔ)言編寫(xiě)的。而為了達到跨平臺的目的,Java軟件是以字節碼(或叫中間代碼,bytecode),而非計算機能直接執行的機器碼(Machine Code,有時(shí)也叫作Binary)的形式存在。因此執行Java軟件時(shí),需要一個(gè)Java虛擬機(Android系統中的Java虛擬機就是Dalvik)負責解釋運行,有的時(shí)候,虛擬機還會(huì )通過(guò)即時(shí)編譯(JIT)的方法將字節碼編譯為機器碼后再運行,以提高程序的執行效率。
這就出現一個(gè)很有趣的現象:
除非另行規定,作為設備的擁有者,用戶(hù)總是可以自行決定如何使用軟件,能自行決定程序能否訪(fǎng)問(wèn)用戶(hù)自己的計算機(移動(dòng)設備亦然)里面的各個(gè)內容、對象。
由此衍生出,在需要對代碼編譯、解釋的場(chǎng)合,用戶(hù)也能通過(guò)對編譯器(解釋器)的干預,來(lái)影響代碼的執行效果。在A(yíng)ndroid中,用戶(hù)還可以在Dalvik解釋、編譯的時(shí)候動(dòng)手。
這是因為,著(zhù)作權僅保護了軟件代碼不受到非授權的反向工程,未授權傳播等侵犯。另一方面,對于A(yíng)ndroid上的Java,網(wǎng)頁(yè)中的javascript程序,賦予用戶(hù)解釋、編譯的權利是程序能執行的先決條件;同時(shí),軟件發(fā)行者發(fā)通常也會(huì )主動(dòng)提出放棄這種權利(表現為'軟件按原樣提供'、'不對使用軟件造成的后果負責'等條目)
在編譯、解釋的過(guò)程中,需要通過(guò)匯編(Assemble),連接(Link)等方法將編譯好的對象(Object)、方法(Function)聯(lián)系起來(lái)。默認情況下,這些行為是由原始的代碼(源代碼、中間代碼)與編譯器(解釋器)決定的,但是用戶(hù)可以通過(guò)制約編譯器(解釋器)的設置,從而影響到最終代碼。這么做是沒(méi)有問(wèn)題的。
還有一種,應用程序在安裝后,會(huì )在系統中產(chǎn)生一些緩存,或注冊一些信息。當其中的內容有關(guān)用戶(hù)數據時(shí),讀取或修改它們也是沒(méi)有問(wèn)題的。這就是所謂"只要是你的東西總是你的";也是Cyanogen Mod、Permission Denied不會(huì )涉及版權問(wèn)題的原因所在。
總之,一個(gè)Android應用之所以能運行的前提是:
1,首先,用戶(hù)允許使用這個(gè)應用
這也可以理解成:用戶(hù)安裝了應用(以及因此設定的后臺對象),購買(mǎi)了預裝應用的手機。這一點(diǎn)即不影響應用程序的主動(dòng)通知義務(wù),也不影響用戶(hù)事后的干預。
2,接下來(lái),用戶(hù)允許Dalvik對該應用使用"解釋","JIT"的方法,從而該應用程序得以執行。
3,用戶(hù)隨時(shí)可以對該應用作出任意不違反版權的干預。
所以,在沒(méi)有另行規定的前提下,用戶(hù)總是可以自行決定,通過(guò)給應用程序分配自定義的權限;或是在應用程序調取內容,對象時(shí)予以阻斷。同時(shí),用戶(hù)也需要自行承擔因不當操作產(chǎn)生的后果。
附錄:
1、 數字簽名
數字簽名是一種使用了公鑰加密領(lǐng)域的技術(shù)實(shí)現,用于鑒別數字信息的方法。一套數字簽名通常定義兩種互補的運算,一個(gè)用于簽名,另一個(gè)用于驗證。數字簽名可以輕易地驗證完整性(正確性),合法簽署的數字簽名具有不可否認性。 (摘錄自維基百科"數字簽名"條目,有修改)
2、 版權聲明
文章中引用的圖標,圖片或圖片的部分,以及部分文字的引用,僅出于合理使用的目的,可能是持有人版權所有的。
3、 一些行為的說(shuō)明
不道德行為
應用程序在啟動(dòng)時(shí),或在主動(dòng)告知以前,試圖索取、收集電話(huà)號碼、郵箱地址、位置信息等與個(gè)人身份直接關(guān)聯(lián)的內容。如果是與個(gè)人關(guān)聯(lián),但不能直接聯(lián)系到個(gè)人信息的IMEI等設備、SIM卡的串號,則稍微好一些。
附圖1,不道德的應用程序在啟動(dòng)的第一時(shí)間就試圖獲取隱私信息

(新浪微博2.8),無(wú)論用戶(hù)是否綁定了手機,應用都會(huì )第一時(shí)間記錄當前手機的號碼

(UC瀏覽器,快拍二維碼),應用總是會(huì )不主動(dòng)通知地記錄設備的位置信息
沒(méi)有實(shí)行主動(dòng)通知的例子
附圖2 這個(gè)應用程序在第一次啟動(dòng)時(shí)便開(kāi)始收集位置信息,用戶(hù)需要切換六次屏幕才能看到有關(guān)位置信息的提示。這項提示還有意忽略應用程序本身就會(huì )記錄用戶(hù)位置信息,即便用戶(hù)并不使用需要位置信息的服務(wù)
主動(dòng)通知的例子

附圖3 主動(dòng)通知就是在第一屏的醒目處,或用醒目的對比色等強調方式進(jìn)行通告

