这是一个相当古老的问题,但我很惊讶没有一个解决方案适合我。我需要在为Android 7.0版创建的AVD(在模拟器中)中运行一个Android应用程序作为系统应用程序。为此,我想将apk文件推送到系统分区但我不断收到错误,说它是只读文件系统。我在stackoverflow上发现了很多类似的问题,但没有什么对我有用。我在root中重新启动adb,按照类似问题的答案建议使用remount执行它,但系统分区文件系统权限不会更改。这是一个示例会话:
mvsagar@mvslt:~/sw/android_sdk/platform-tools$ ./adb root
restarting adbd as root
mvsagar@mvslt:~/sw/android_sdk/platform-tools$ ./adb remount
remount succeeded
mvsagar@mvslt:~/sw/android_sdk/platform-tools$ ./adb push /home/mvsagar/projects/AndroidStudioProjects/LcnApps/app/LCNUE.apk /system/app/LCNUE.apk
adb: error: failed to copy '/home/mvsagar/projects/AndroidStudioProjects/LcnApps/app/LCNUE.apk' to '/system/app/LCNUE.apk': couldn't create file: Read-only file system
我尝试使用adb shell手动重新安装读/写(rw)选项,但重新安装失败。
有没有办法在系统分区上拥有读/写权限?
我的开发环境是Ubuntu上的Android Studio。
答案 0 :(得分:3)
在我的情况下,我使用了avd(基于:Android 8.0(Oreo)标签/ ABI:google_apis / x86_64)。
$ emulator -avd Nexus_5X_API_26_APIs -writable-system
$ adb root
$ adb remount
然后,/system
是可写的。
$ adb push somefile /system/bin/
正在发挥作用。
答案 1 :(得分:1)
使用genymotion模拟器,它更快,重量更轻且预先生根。 (这意味着您可以访问系统目录)
答案 2 :(得分:1)
使用Q时,这是唯一对我有用的解决方案:https://stackoverflow.com/a/64397712/1898527
在此处添加完成步骤(对原始作者表示敬意):
> emulator -avd Pixel_3a_XL_API_29 -writable-system
> adb shell avbctl disable-verification
> adb disable-verity
现在重新启动模拟器,以使更改生效。
> adb root
> adb remount
> adb shell "su 0 mount -o rw,remount /system"
注意:您将需要一个没有Google Play的模拟器,否则将无法使用。您可以按照此处介绍的步骤进行操作:https://stackoverflow.com/a/45668555/1898527
答案 3 :(得分:0)
为了他人的利益,很久以前@Ishamael在另一个stackoverflow问题Read only file system on Android
中回答了这个问题。