Android 4.3 新增的 "App Ops" 隱私控制功能怎麼用,對比同類應用體驗如何?

Via App Ops: Android 4.3"s Hidden App Permission Manager, Control Permissions For Individual Apps! [Update]


現在還是隱藏的咯,只要找到Activites的快捷方式即可,所以你發的源鏈接里都教了怎樣調出。
使用起來頗像平時我們用Android手機後Root之後安裝許可權管理軟體,比方說上網助手什麼的。不過目前大部分的許可權管理軟體都是一竿子打死,直接禁止啟動或者禁止聯網。谷歌自己弄的app ops許可權很分明,可以很細的針對某一個軟體進行許可權控制,比方說,我們可以禁止Hangouts讀取我們的通訊錄、或者接收簡訊、或者禁止它調用相機。其他軟體以此類推,都將許可權非常分明地列出來了。
並且,App ops里還提供了時間戳,顯示了每個許可權上次調用的時間,這個好處,,我想有時候還可以查出是哪個垃圾軟體亂髮簡訊導致扣費的問題吧…
按「LOCATION」、「PERSONAL」、「MESSAGING」,「DEVICE」四個分類也讓人可以從一開始就奔自己想要關閉或者開啟的許可權去,不過分類下的內容就難免重複了,有些軟體的許可權要求真TM多了。但有分類還是好的,畢竟許可權管理這種看起來「門檻」比較高的東東,多分明多好處。
其實也沒啥可說的,做得不錯,谷歌應該是想更好地管理Android上的許可權,也將主動權完全交給用戶,至少,在安全性的問題上,開源的Android沒辦法像iOS一樣,那就多給用戶一些選擇。


數碼媒體@愛搞機 做了一個apk,只有99k體積,不需root,可以簡單快捷的調出許可權管理,推薦刷到4.3的朋友試試(其他版本的Android不行啦)
應用許可權管理-By-DoubleX-igao7.zip 解壓密碼:igao7.com
使用launcher調用 Activity組件的方法見這裡

說體驗的話,基於系統原生的功能優勢都是簡單幹凈,可是說實在的,讓用戶安裝完應用再去逐一折騰許可權真心是件不怎麼痛快的事情,麻煩的要命不說,也可能小白用戶根本不知道自己在幹什麼,出了問題還是會罵到app開發者和Android的頭上。

怎麼做更舒服一些呢?

我其實很建議把這玩意放到app安裝前的那個許可權說明界面上(這個MIUI v5已經做到了),因為自從使用Android開始我就搞不清Google把app許可權陳列出來又不讓用戶去選擇是個什麼邏輯,要麼接受要麼滾?太生硬了吧~

另外一個實用的方法是在app調取關鍵許可權時彈出提示(這個lbe已經做到了,MIUI也有類似的),比如「xx正在讀取你的簡訊,是否允許?」,因為放在具體的場景下用戶更容易理解許可權的意義,不同的場景下用戶往往也會有不同的選擇,固定的設置很多情況下不那麼適合。

其實用戶最喜聞樂見的還是「一鍵優化」,「您的手機健康指數是xxx」這種模式(眾多手機衛士大部分都能做到),不多說了。。。

上面這些話大概就是回答「對比同類應用體驗如何」了,說到底谷歌還是個工程師文化的公司,他們考慮Android的時候往往會琢磨「提高Dalvik效率」「減少RAM佔用」「整合OpenGL ES 3.0」「黃油計劃」這種底層技術性問題,知道用戶需要許可權管理,就先把SELinux塞進來,至於好不好用。。。那就不是第一順位考慮的事情啦~

當然谷歌也在轉變,把這個功能隱藏這麼深其實就說明完善程度還很一般,否則就該直接放在「開發者選項」中,到了正式上線這個功能之後再看看成果如何吧:-)


非常不完善的一個功能。它檢測應用許可權不是靠應用申請的許可權,而是靠調用一次API才檢測到的。也就是說如果應用沒有調用過特定API,完全無法阻止其第一次調用。


Intent intent = new Intent();
intent.setClassName("com.android.settings",
"com.android.settings.Settings$AppOpsSummaryActivity");
startActivity(intent);


這些功能,基本上LBE都有,也是細分到每一個具體許可權的。
而LBE有的,Android系統可能還沒開放呢,例如啟動管理(不停的殺進程很煩啊),聯網許可權管理等等。


Android 4.3 Jelly Bean 上可以用adb命令啟動(親測有效):

adb shell am start -a android.settings.APP_OPS_SETTINGS

或者

adb shell am start com.android.settings/.Settings$AppOpsSummaryActivity

Android 4.4 KitKat 上按照 figo future 提供的方法和ref頁面說到的:

adb shell am start -n com.android.settings/com.android.settings.Settings
-e :android:show_fragment com.android.settings.applications.AppOpsSummary
--activity-clear-task --activity-exclude-from-recents

可以簡寫為:

adb shell am start -n com.android.settings/.Settings -e :android:show_fragment com.android.settings.applications.AppOpsSummary -f 0x808000

不過我在Galaxy S5 4.4.2上面失敗了,下載的app啟動器也失敗了。提示Activity class不存在

Error: Activity class {com.android.settings/com.android.settings.Settings} does not exist.

感謝 @陳彪 和 @figo future

------------------------------------------
App Ops用起來倒是很簡單,可惜許可權管理只是一部分,不如LBE(隱私衛士或其他)多,但最全面的是Xpose + Xprivacy。推薦普通用戶使用LBE安全大師,潔癖用戶使用LBE隱私衛士,高級用戶使用Xprivacy,不想root的用戶使用App Ops。(ps:LBE也有自帶root功能的版本可用於不root的設備。)


android 4.4上已經無法用各類調用的快捷方式了,google已經在系統設置這個應用中封堵了具備這個功能的界面,具體請看https://android.googlesource.com/platform/packages/apps/Settings/+/ca1b7458244191214172009d21eae2d04b6992f9%5E!/#F0

ca1b745 Completely remove app ops activity. by Dianne Hackborn - 4 months ago

有人已經發現有支持4.4調用這個隱藏功能的方法了,
Intent intent = new Intent();
intent.setClassName("com.android.settings",
"com.android.settings.Settings");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.putExtra(":android:show_fragment",
"com.android.settings.applications.AppOpsSummary");
startActivity(intent);
具體詳見 How to invoke AppOps in Android 4.4 KITKAT


這個見仁見智吧,跟同類應用比起來也沒啥特別的優勢,另外@zhaosj@zhaosj (怎麼會有兩個?)說的,LBE會不停殺進程,這個不合適,LBE不是用這種方法,LBE會將應用標記為「禁止廣播」的狀態,應用剛剛安裝完成的時候就是這種狀態,這個狀態下不會自啟動。用戶手動啟動應用時狀態也就改變了,用戶結束應用時重新標記為該狀態。


所以Google其實不在乎用戶的隱私。畢竟它就是通過這些數據來發廣告的。而且Android不面向用戶。只是提供給廠商的東西而已。如果真要做好隱私管理。它不會做不出來的。最近的高端市場接近蘋果一統天下的局面2015年。最後Google被趕出大陸。也一定有自己單方面作死的原因。決對不可能政府單方面的動作。


推薦閱讀:

手機業界對 Smartisan OS 的評價如何?
堅果pro高配2299的定價是否衝擊了鎚子的產品線?
羅永浩基於 CyanogenMod 修改的 Android ROM 稱作 OS 是否合適?
怎麼評價鎚子第一單的疑似造假行為?
只靠ASO,日新增用戶最高可以做到多少?(IOS和安卓分開)

TAG:Android | Android43 | AppOps |