在8.0和8.1 平臺(tái) 上面預(yù)置 可卸載APP 時(shí)? 如果不顯示或者不成功
需要判斷是否是V2 簽名 如果是V2簽名 請將app放在vendor/haocheng/proprietary/data/app_v2 這個(gè)目錄下面
其次 debug 驗(yàn)證app預(yù)置是否能夠正常運(yùn)行時(shí)? push 到vendor/operator/app? 重啟沒顯示的話 請恢復(fù)出廠設(shè)置
[DESCRIPTION]
Google在N上引入了一項(xiàng)新的應(yīng)用簽名方案Signature Scheme v2稍浆,它能提供更快的應(yīng)用安裝時(shí)間和更多針對APK文件更改的保護(hù)
在N上預(yù)置APK時(shí)载碌,如果APK是采用的Signature Scheme v2簽名,采用原有的預(yù)置應(yīng)用方式預(yù)置APK會(huì)失斝品恪:
[SOLUTION]
經(jīng)過BUILD_PREBUILT后的apk與原apk是有差異的嫁艇,因?yàn)関2是對apk整體簽名,所以這個(gè)差異導(dǎo)致簽名失效弦撩;
1步咪、放入到工程用android.mk編譯之后的APK是有區(qū)別的,android編譯系統(tǒng)會(huì)用zipalign對APK進(jìn)行字節(jié)對齊等操作
2益楼、APK Signature Scheme v2這個(gè)是Google在N上新引入的簽名方式:v2 簽名將驗(yàn)證歸檔中每個(gè)文件的已壓縮文件內(nèi)容猾漫,如有任何自定義任務(wù)篡改 APK 文件或?qū)ζ溥M(jìn)行后處理(無論以任何方式),那么v2 簽名會(huì)有作廢的風(fēng)險(xiǎn)
在預(yù)置APK build進(jìn)系統(tǒng)時(shí)候不讓其走編譯流程偏形,在其他模塊的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}
在預(yù)置apk之前可以先把a(bǔ)pk push到vendor/operator/app文件下看是否運(yùn)行正常,
如果報(bào)錯(cuò)提示如下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版本手動(dòng)測試:adb shell setenforce 0 后是否運(yùn)行正常
如果解決問題做如下修改
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;