91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android恢復出廠設置

發布時間:2020-07-04 20:56:56 來源:網絡 閱讀:19420 作者:年少的風 欄目:移動開發



恢復出廠設置核心代碼:

sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));

即發送一個廣播,需要在AndroidManifest.xml配置

<receiver android:name="com.android.server.MasterClearReceiver"
      android:permission="android.permission.MASTER_CLEAR"
      android:priority="100" >
      <intent-filter>
      <!-- For Checkin, Settings, etc.: action=MASTER_CLEAR -->
      <action android:name="android.intent.action.MASTER_CLEAR" />

      <!-- MCS always uses REMOTE_INTENT: category=MASTER_CLEAR -->
      <category android:name="android.intent.category.MASTER_CLEAR_NOTIFICATION" />
      </intent-filter>
</receiver>

并加入權限

<uses-permission android:name="android.permission.MASTER_CLEAR" />


基本上以上就可以實現恢復出廠設置的。系統的設置功能就是這樣完成恢復出廠設置的,但是這個過程中有很多問題,主要是因為權限造成的。

最明顯的問題是,添加android.permission.MASTER_CLEAR權限時會報錯。

Permission is only granted to system apps

這里就說明了我們自己實現恢復出廠設置和系統設置恢復出廠的區別


這個錯誤很好解決,只需要 project\clean 一下就去掉錯誤了


但是運行程序時,當然不會恢復出廠啦,提示是權限不足,

E/AndroidRuntime(2562): java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MASTER_CLEAR_NOTIFICATION from pid=2562, uid=10027

根據提示可以看出是廣播的權限,但是我們已經聲明了權限

android:permission="android.permission.MASTER_CLEAR"

在android/platform/frameworks/base/core/res/AndroidManifest.xml文件中,可以看到


 <!-- ================================================ -->
 <!-- Special broadcasts that only the system can send -->
 <!-- ================================================ -->
<protected-broadcast android:name="android.intent.action.MASTER_CLEAR_NOTIFICATION" />


當然還有很多類似的


也就是說我們不能使用這個廣播,但是沒有其他辦法的情況下只能鏟除這塊石頭

直接把這條注釋掉,然后重新編譯系統,燒錄,然后就能夠前進一步


繼續運行會發現新的錯誤

E/MasterClear(1060): Can't perform master clear/factory reset
E/MasterClear(1060): java.io.FileNotFoundException: /cache/recovery/command: open failed: EACCES (Permission denied)

依然是權限問題,即沒有/cache/recovery/文件夾的操作權限

網上有好幾種解決辦法,我只說我最終解決問題的辦法

(1)AndroidManifest.xml添加android:sharedUserId="android.uid.system"
(2)Android.mk添加LOCAL_CERTIFICATE := platform

此時,程序是不能安裝的,提示錯誤:

Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

大概意思就是要給apk添加系統權限

我用系統自帶

用Android自帶的signapk.jar + .x509.pem + .pk8簽名應用程序

platform/build/target/product/security/中找到platform.pk8 platform.x509.pem等簽名文件

signapk.jar:由/platform/build/tools/signapk/編譯產出,可以在/out/host/linux-x86/framework/中找到

把這幾個文件與apk放到同一目錄下,命令行執行


java -jar signapk.jar platform.x509.pem platform.pk8 FactoryTest.apk FactoryTest_signed.apk


MyFactoryTest_signed.apk安裝后,發現任然不能安裝,錯誤

Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]



采用另一種方法,用

mm命令

在Android源碼環境下編譯得到apk

  1. 將eclipse中的項目MyFactoryTest整個拷貝到android/platform/packages/apps/目錄下

  2. 在android源碼根目錄下執行:source build/envsetup.sh

  3. 到剛才的項目目錄下(cd android/platform/packages/apps/MyFactoryTest)執行:mm

  4. 安裝android/platform/out/target/product/mt8658sdk/system/app/MyFactoryTest1.2.apk


出現錯誤Failure [INSTALL_FAILED_DEXOPT]


這是因為在system\app下面的apk是經過優化的,而dex文件不會打包到apk中,dex文件會被優化后,生成odex文件

下面就是程序經編譯之后,在workspace/out/target/product/generic/system/app/下生成的.odex和.apk兩個文件

Install: out/target/product/generic/system/app/xxx.odex
Install: out/target/product/generic/system/app/xxx.apk

這樣安裝apk時,就會缺少dex文件,導致報錯[INSTALL_FAILED_DEXOPT]。

找到未優化過的apk,即在out/target/product/generic/obj/APPS/下找到對應的APP:package.apk.unaligned

當然可以重命名一下 package.apk.unaligned ————>FactoryTest.apk

安裝后完成



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄骅市| 崇仁县| 涿鹿县| 锦屏县| 普宁市| 潮州市| 盖州市| 黄龙县| 军事| 濮阳市| 玉山县| 中宁县| 鄱阳县| 巴马| 睢宁县| 泸西县| 长子县| 成武县| 香格里拉县| 柳州市| 广西| 河曲县| 九龙县| 贵阳市| 攀枝花市| 峨眉山市| 高州市| 浦县| 廉江市| 安徽省| 盘山县| 张家港市| 彭泽县| 泸水县| 鹿泉市| 邳州市| 洪洞县| 雅安市| 浮山县| 陆丰市| 大同县|