開機啓動調研

開機啓動調研


結論

測試機型  是否支持第三方應用檢測開機啓動  是否支持第三方應用跳轉到設置頁
小米2s  支持  不支持(僅能進入到應用詳情)
華爲Mate7  不支持  支持

詳細步驟

Miui
--開機啓動
  • 進入設置開機啓動的界面. 經過 adb shell dumpsys activity activities | grep "*"可見當前堆棧信息java

    // 這個就是最上層的activity名字。可見目標apk的包名是com.android.settings。初步推斷應該是系統的Setting的apk
    com.android.settings/com.miui.securitycenter.permission.AppPermissionsEditor
  • 去系統中找到對應的apkandroid

    確定是系統級。因此咱們直接去/system/app/下面看看.shell

    能夠找到Settings.apk. 這個看上去頗有可能就是咱們找到。app

  • 後面就是反編譯apk了。unzip >> dex2jar >> jad .細節這裏就不在贅述。ide

  • 查看AppPermissionsEditor 找到以下的關鍵代碼:函數

  • 結論:測試

    miui經過applicationInfo的flags中來斷定是否支持開機啓動。ui

  • 代碼:3d

--啓動設置頁
  • 僅能進入應用詳情界面。沒法跳轉到設置開機權限界面code

  • 代碼:

華爲
--開機啓動

華爲的歷程仍是比較艱難的。

思路和Miui同樣。找到對應的apk,反編譯,找到關鍵代碼。看看是否能復現。

  • 進入設置開機啓動的界面. 經過 adb shell dumpsys activity activities | grep "*"可見當前堆棧信息

    發現包名是com.huawei.systemmanager 
    Activity爲.optimize.bootstart.BootStartActivity
  • 一樣去system/app 找到最類似的apk

    這個是odex文件。因此須要將odex轉爲dex.
    
      這個須要下載baksmali,smali這個東西。
    
      具體odex到dex命令以下
    
      adb pull /system/framework . 
    
      java -jar baksmali-2.0.3.jar -d . -x HwSystemManager.odex
    
      java -Xmx512M -jar smali-2.0.3.jar out -o classes.dex 
    
      這樣咱們就拿到dex了.路上會一堆警告先不用管。
  • 而後dex反編譯。發現根本走不通。會出現error。是得咱們不能找到想要的optimize.bootstart.BootStartActivity。

  • 只能經過查看smali文件。

    思路:

    • 界面是個ListView。那麼確定對應有adapter。裏面的數據確定包含是否容許開機啓動的變量。

    • 並且確定有入口設置開機啓動狀態。由於界面有個button麼。哈。

    • 最終咱們找到changeSwitchStatus這個函數發現mAllow屬性就是控制是否開機啓動的。

    • 同時發現重要的成員變量:mFilteredAllStartAppList

    • 而後順着mFilteredAllStartAppList。能夠發現Adapter在構造的時候第一參數傳進去的。

    • mFilteredAllStartAppList加載是經過StartupInfoLoadingTask加載的。而後經過靜態方法access$100把結果放回去。

    • 天然去doInBackground搞去

    • 發現高能函數BootStartManager#getAllStartAppList。以後可找到getForbidAppListInTable。這個是加獲取禁止啓動加載數據的。

    • 最 終,可見經過ContentProvider獲取禁止啓動app的數據。

      下面這句話說明的請求的uri

      sget-object v1, Lcom/huawei/systemmanager/optimize/Const;->START_UP_FORBIDDEN_APPS_URI:Landroid/net/Uri;
  • 而後經過Uri,本覺得能夠happy的拿到數據了。寫完代碼以後。運行。Crash...

    java.lang.SecurityException: Permission Denial: opening provider com.huawei.systemmanager.optimize.db.OptimizeProvider from ProcessRecord{43aae548 15462:com.gudong.client/u0a95} (pid=15462, uid=10095) requires com.android.permission.system_manager_interface or com.android.permission.system_manager_interface
  • 請求其餘app時須要權限。加上提示中的權限也不可。

  • 反編譯AndroidManifest.xml。看看究竟是什麼緣由。

    java -jar ~/Software/java-decompile/AXMLPrinter2.jar AndroidManifest.xml >> AndroidManifest.txt

    protectionLevel值爲3.查文檔以下。非相同證書籤名或系統才能使用此權限

  • 結論:

    並不能直接讀取華爲meta7中,禁止開機啓動的數據

--啓動設置頁
  • 有AndroidManifest.xml。 直接啓動該Activity便可。

  • 代碼:

  •  

相關文章
相關標籤/搜索