采用Signature Scheme v2簽名方式的APK預置進系統(tǒng)失敗-----解決方法

在8.0和8.1 平臺 上面預置 可卸載APP 時? 如果不顯示或者不成功

需要判斷是否是V2 簽名 如果是V2簽名 請將app放在vendor/haocheng/proprietary/data/app_v2 這個目錄下面

其次 debug 驗證app預置是否能夠正常運行時? push 到vendor/operator/app? 重啟沒顯示的話 請恢復出廠設置


[DESCRIPTION]

Google在N上引入了一項新的應用簽名方案Signature Scheme v2,它能提供更快的應用安裝時間和更多針對APK文件更改的保護

在N上預置APK時,如果APK是采用的Signature Scheme v2簽名,采用原有的預置應用方式預置APK會失敗:


[SOLUTION]

經(jīng)過BUILD_PREBUILT后的apk與原apk是有差異的,因為v2是對apk整體簽名,所以這個差異導致簽名失效;

1、放入到工程用android.mk編譯之后的APK是有區(qū)別的,android編譯系統(tǒng)會用zipalign對APK進行字節(jié)對齊等操作

2、APK Signature Scheme v2這個是Google在N上新引入的簽名方式:v2 簽名將驗證歸檔中每個文件的已壓縮文件內容,如有任何自定義任務篡改 APK 文件或對其進行后處理(無論以任何方式),那么v2 簽名會有作廢的風險

在預置APK build進系統(tǒng)時候不讓其走編譯流程,在其他模塊的android.mk加入下面的cp腳本:

$(shell cp $(LOCAL_PATH)/***/*.apk $(TARGET_OUT)/vendor/operator/app)

怎么知道APK是不是采用Signature Scheme v2簽名?

可參考:http://blog.bihe0832.com/android-v2-signature.html

可以使用附件jar包檢查apk是不是v2簽名

java -jar ./CheckAndroidV2Signature.jar ××××.apk {"ret":0,"msg":"ok","isV2":false,"isV2OK":true}

在預置apk之前可以先把apk push到vendor/operator/app文件下看是否運行正常,

如果報錯提示如下log信息

01-01 13:12:13.350 4400 4400 W com.telcel.imk: type=1400 audit(0.0:512): avc: denied { read } for name="libsqlite3.so" dev="mmcblk0p22" ino=417870 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:system_data_file:s0 tclass=file permissive=0

01-01 13:12:13.356 1574 1574 V DisplayEventReceiver: call nativeScheduleVsync mReceiverPtr = -1449357200

01-01 13:12:13.357 4400 4400 E Database: Cannot load native library

可以先用eng版本手動測試:adb shell setenforce 0 后是否運行正常

如果解決問題做如下修改

Add the policy to alps/device/mediatek/common/sepolicy/basic|bsp|full/untrusted_app.te

#====================== untrusted_app.te ======================

allow untrusted_app system_data_file:file r_file_perms;

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容