天天看點

Android應用push到/system/app/後so庫不能加載

Android應用為了保證自動啟動和程序存活,通過直接push到/system/app/下的方式來安裝。應用内引用了幾個動态連結庫(so),但是每次啟動的時候,都會報動态連結庫加載錯誤:

一開始懷疑是自己gradle配置或者是庫使用錯誤的架構的問題,但是嘗試了所有的gradle配置,apk裡也打包了全部可能的庫架構(armeabi,armeabi-v7a,arm64-v8a),報錯仍然存在。後來嘗試了一下普通的安裝方式,發現并沒有報錯,推測是安裝方式的問題。

網上查了一下資料,果然是這個原因。通過push到/system/app/目錄下安裝應用時,同時需要将so檔案push到系統的/system/lib/目錄下(64位系統是/system/lib64/)。

這裡還有一個小技巧。我用的裝置是64位的系統,但是我之前隻找到了32位的so檔案,要下載下傳64位還得搞一個簽名程式,各種麻煩。正在頭疼的時候,忽然發現這個庫可以直接在gradle裡添加jcenter的引用(即使這樣仍然需要push so檔案到/system/lib64/下面),使用正常安裝的方式,然後進到Android系統的/data/app/{應用包名}路徑下,裡面就能找到自己要的so檔案了。

不過這個方法還是不夠靈活,在考慮做成應用自動下載下傳so檔案,并push到對應目錄的方式。

參考:

Android模拟器, push檔案到system下檔案夾權限,空間,SO檔案沒有自動安裝的問題

将第三方apk變成系統apk