1

サービスを作成し、SystemService に追加します。しかし、WRITE_EXTERNAL_STORAGEの許可であるため、サービスがextsdカードを選択できないことがわかりました。私はファイルを読みました: http://www.chainfire.eu/articles/113/Is_Google_blocking_apps_writing_to_SD_cards_/ そして、システムに WRITE_EXTERNAL_STORAGE パーミッションを追加する方法を知っています。しかし、それは仕事ではありません。強調されたテキスト

アプリにテストコードを書きます。問題ありません。権限が次のように正しいことを確認します。

File newDir = new File("/mnt/extsd/");
newDir.mkdirs();
File wtSd = new File(newDir.getAbsolutePath(), "file.txt");
BufferedWriter writer;

try {
    java.lang.Process process = Runtime.getRuntime().exec("id");
    InputStream input = process.getInputStream();
    byte[] bytes = new byte[1204];
    int len;
    while((len = (input.read(bytes))) > 0){
        System.out.print(new String(bytes, 0, len));
    }
    input.close();
} catch(IOException e) {
    e.printStackTrace();
}

Log.i(TAG, "write extsd"+wtSd.getAbsolutePath()+wtSd.getName());
try {
    writer = new BufferedWriter(new FileWriter(wtSd));
    writer.write("hello, extsd");
    writer.flush();
    writer.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

許可は: I/System.out(2804): uid=10036(app_36) gid=10036(app_36) groups=1000(system),1015(sdcard_rw) I/AR300 UPD(2804): write extsd/mnt/extsd /file.txtfile.txt


しかし、システムサービスの同じコードでは、それは悪いです

コードは

try{
    java.lang.Process process = Runtime.getRuntime().exec("id");
    InputStream input = process.getInputStream();
    byte[] bytes = new byte[1204];
    int len;
    while((len = (input.read(bytes))) > 0) {
        System.out.print(new String(bytes, 0, len));
    }
    input.close();
} catch(IOException e) {
    e.printStackTrace();
}

File newDir = new File("/mnt/extsd/");
newDir.mkdirs();
File wtSd = new File(newDir.getAbsolutePath(), "file.txt");
BufferedWriter writer;

Log.i(TAGC, "write extsd"+wtSd.getAbsolutePath());
try {
    writer = new BufferedWriter(new FileWriter(wtSd));
    writer.write("hello, extsd");
    writer.flush();
    writer.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

私のサービス許可は: I/System.out( 2249): uid=1000(system) gid=1000(system) groups=1001(radio),1002(bluetooth),1003(graphics),1004(input),1005( audio),1006(カメラ),1007(ログ),1008(コンパス),1009(マウント),1010(wifi),1018(usb),3001(net_bt_admin),3002(net_bt),3003(inet),3006( net_bw_stats),3007(net_bw_acct)

説明は明らかです。私のサービスは 1015(sdcard_rw) を選択できません。


drwxr-xr-x ルート システム 1970-01-02 03:17 asec d---rwxr-x システム sdcard_rw 1970-01-01 00:00 extsd drwxr-xr-x ルート
システム 1970-01-02 03:17 obb drwx------ ルート ルート
1970-01-02 03:17 セキュア drwxrwxr-x システム グラフィックス
1970-01-02 03:17 shm d --------- システム システム 1970-01-02 03 :17 uディスク


マウント

root@android:/mnt # rootfs をマウント / rootfs ro,relatime 0 0 tmpfs /dev tmpfs rw,nosuid,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 なし /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 /mnt/shm tmpfs rw,relatime,size=1024k,mode=775,uid=1000,gid=1003 0 0 none /dev/cpuctl cgroup rw,relatime, cpu 0 0 /dev/block/mmcblk0p5 /system ext4 ro,relatime,user_xattr,barrier=1,data=ordered 0 0 /dev/block/mmcblk0p7 /data ext4 rw,nosuid,nodev,noatime,nodiratime,errors=panic, user_xattr,barrier=0,nomblk_io_submit,data=ordered,noauto_da_alloc,discard 0 0 /dev/block/mmcblk0p6 /cache ext4 rw,nosuid,nodev,relatime,user_xattr,barrier=1,data=ordered 0 0 /dev/block/mmcblk0p8 /vendor ext4 rw,nosuid,nodev,relatime,user_xattr,barrier=1,data=ordered 0 0 none /sys/kernel/debug debugfs rw,relatime 0 0 /dev/block/vold/179:25 /mnt/extsd vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437 ,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0


システムに 1015 グループを追加する方法??

4

0 に答える 0