android user模式下如何替換odex檔案

2021-06-19 22:45:54 字數 987 閱讀 5410

開發階段為了方便除錯,android都是使用eng版本進行編譯,修改**的時候無需重新生成整個system映象,而只需要用mm編譯出對應的模組,然後將模組adb push到系統中就可以看到效果了。比如修改了framework,則只需將新的framework.jar通過命令adb push framework.jar /system/framework/放置到/system/framework目錄下,再重啟android就可以生效了。

但是user模式下的編譯,jar包都會被優化為odex,這時候如果直接替換odex,系統是無法起來的,主要是因為odex為進行校驗。網上有方法如下:

busybox dd if=/system/framework/framework.odex of=framework.odex bs=1 count=20 skip=52 seek=52 conv=notrunc

即將老的framework.odex的簽名搬到新的framework.odex上面,這樣簽名一致,就可以通過系統的驗證。但是這種辦法我在android4.2.2上面試驗失敗。因為系統都是自己編譯的,所以查查問題發生的原因是什麼,檢視logcat可以看到:

看來是某個assert沒有通過,所以在原始碼下搜尋"has stale dependencies"

grep --include=*.cpp -rns "has stale dependencies"

可以找到是函式dvmcheckoptheaderanddependecies()這個函式進行簽名校驗的。

修改方法如下:

最後把生成的libdvm.so替換了就可以了

adb push libdvm.so /system/lib/

然後就可以通過替換odex來進行除錯了。

Nginx 下快取靜態檔案(如css js

目的 快取nginx伺服器的靜態檔案。如css,js,htm,html,jpg,gif,png,flv,swf,這些檔案都不是經常更新。便於快取以減輕伺服器的壓力。實現 nginxproxy cache可以將使用者的請快取到本地乙個目錄,當下乙個請求時可以直接調取快取檔案,就不用去後端伺服器去取檔案...

Nginx 下快取靜態檔案(如css js

目的 快取nginx伺服器的靜態檔案。如css,js,htm,html,jpg,gif,png,flv,swf,這些檔案都不是經常更新。便於快取以減輕伺服器的壓力。實現 nginxproxy cache可以將使用者的請快取到本地乙個目錄,當下乙個請求時可以直接調取快取檔案,就不用去後端伺服器去取檔案...

Linux Centos7下如配置連線網路

1,使用命令nmcli 命令 root learnhost nmcli connection add con name new net type ethernet autoconnect yes ifname ens36 ipv4.addresses 192.168.1.200 24 gw4 192...