获取system目录的挂载点

glzlaohuai 2012-06-05 06:09:54
我先说一下需求吧:
1、有一堆已取得root权限的手机
2、一个usb分线器
3、一个apk文件(x.apk)
需求:将这些手机全部插到分线器上,然后运行一个app,将x.apk放到system/app目录下

我的思路:
1、因为同时连接多部手机,所以首先执行adb devices命令获取设备的serialNumber
2、遍历所有设备执行adb push命令

着手开始做时候,一开始想做一个bat文件的,但对dos不熟放弃了,开始拿java写,第一步完成了,在第二步时候提示“Read-only file system”,google以后在这里找到了答案"http://androidforums.com/droid-all-things-root/91799-read-only-file-system-when-trying-adb-push-app.html",在命令行下执行:
adb shell
mount -rw -o remount 你的system目录的挂载点


现在问题就是可以命令行下,我手动将system目录挂载为读写,但无法写到程序里,因为执行adb shell进入shell以后,不清楚如何在程序中再执行其他命令(如:上面的mount)并返回结果。

哪位大神路过的话,指点下小弟吧……

...全文
898 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
MySQLzhuru 2014-01-16
  • 打赏
  • 举报
回复
Java强大但好复杂。批处理功能少但几行就搞定了。
MySQLzhuru 2014-01-16
  • 打赏
  • 举报
回复
试着直接运行命令: adb shell su -c "busybox mount -o rw,remount /system" 这就会以root权限执行挂载。要想adb执行命令后自动退出,直接adb shell +命令,装软件adb push x.apk /sdcard 再adb shell su -c "cp /sdcard/x.apk /system/app/ &rm -f /sdcard/x.apk 就好了。
glzlaohuai 2012-06-06
  • 打赏
  • 举报
回复
再简单一点来说就是:我通过一个java app在win下调用了cmd的adb shell命令,如何在shell底下再执行其他命令,像su,mount,并且能获取到执行的结果,希望各位路过的帮忙看一下
glzlaohuai 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:

引用 4 楼 的回复:
windows下面不太懂,用linux吧,用shell写个脚本应该比较方便

问题是需求是做一个很傻瓜的,谁都会用的东西,点个按钮(或者随便什么东西),将一个apk文件放到一堆手机的system/app目录下……而一般来说,傻瓜们不会知道linux是什么东西。。。

我猜楼主是搞应用预装的吧?
呵呵,windows下不太懂,不过应该……
[/Quote]
哎,业余帮别人做的东西……google了一下“java调用cmd命令,并返回结果”,自己写了一个方法:
private String execCMD(String cmd) {
System.out.println("******cmd execute start:" + cmd + "******");
Runtime runTime = Runtime.getRuntime();
Process process = null;
try {
process = runTime.exec(cmd);
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));

StringBuffer sb = new StringBuffer();

try {
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
sb.append(s);
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}

System.out.println(sb.toString());

reader = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
StringBuffer esb = new StringBuffer();

try {
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
esb.append(s);
esb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}

System.out.println("******error str is:" + esb.toString());
System.out.println("******cmd execute end******");
return sb.toString();
}

但问题是,执行像"ping,adb devices,adb install"这些直接返回结果的命令时可以用,但执行"adb shell"以后,不知道怎么再在shell下执行像"su mount"这些命令了……

求指教linux下怎么写。
louyong0571 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
windows下面不太懂,用linux吧,用shell写个脚本应该比较方便

问题是需求是做一个很傻瓜的,谁都会用的东西,点个按钮(或者随便什么东西),将一个apk文件放到一堆手机的system/app目录下……而一般来说,傻瓜们不会知道linux是什么东西。。。
[/Quote]
我猜楼主是搞应用预装的吧?
呵呵,windows下不太懂,不过应该也有提供程序调用命令的api吧,类似exec之类的。
glzlaohuai 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
windows下面不太懂,用linux吧,用shell写个脚本应该比较方便
[/Quote]
问题是需求是做一个很傻瓜的,谁都会用的东西,点个按钮(或者随便什么东西),将一个apk文件放到一堆手机的system/app目录下……而一般来说,傻瓜们不会知道linux是什么东西。。。
louyong0571 2012-06-06
  • 打赏
  • 举报
回复
windows下面不太懂,用linux吧,用shell写个脚本应该比较方便
glzlaohuai 2012-06-06
  • 打赏
  • 举报
回复
拍半天脑袋以后依旧无果……
glzlaohuai 2012-06-05
  • 打赏
  • 举报
回复
另外,获取system挂载点我是先执行mount,然后自己在返回结果里找的
# mount
mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
/dev/block/mmcblk0p25 /system ext4 ro,relatime,barrier=1,data=ordered 0 0
/dev/block/mmcblk0p26 /data ext4 rw,nosuid,nodev,noatime,nodiratime,barrier=1,da
ta=writeback,noauto_da_alloc 0 0
/dev/block/mmcblk0p27 /cache ext4 rw,nosuid,nodev,noatime,nodiratime,barrier=1,d
ata=writeback,noauto_da_alloc 0 0
/dev/block/mmcblk0p28 /devlog ext4 rw,nosuid,nodev,noatime,nodiratime,barrier=1,
data=writeback,noauto_da_alloc 0 0
/sys/kernel/debug /sys/kernel/debug debugfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /app-cache tmpfs rw,relatime,size=8192k,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
tmpfs /data/secure/data tmpfs rw,relatime,mode=771,uid=1000,gid=1000 0 0
/data/d /data/d debugfs rw,relatime 0 0
htcfs /data/htcfs fuse.htcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow
_other 0 0
DxDrmServerIpc /data/DxDrm/fuse fuse.DxDrmServerIpc rw,nosuid,nodev,relatime,use
r_id=0,group_id=0,allow_other 0 0
/dev/block/vold/179:65 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,
uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharse
t=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:65 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,rela
time,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,ioc
harset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
/dev/block/dm-0 /mnt/asec/com.ting.mp3.android-1 vfat ro,dirsync,nosuid,nodev,re
latime,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=iso8859-1,shortna
me=mixed,utf8,errors=remount-ro 0 0
/dev/block/dm-1 /mnt/asec/com.mybo.tetris-1 vfat ro,dirsync,nosuid,nodev,relatim
e,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=iso8859-1,shortname=mi
xed,utf8,errors=remount-ro 0 0
/dev/block/dm-2 /mnt/asec/com.wiyun.engine-1 vfat ro,dirsync,nosuid,nodev,relati
me,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=iso8859-1,shortname=m
ixed,utf8,errors=remount-ro 0 0

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧