2017-06-08 8 views
2

J'utilise adb pour pousser et tirer des fichiers vers et depuis un appareil Android. Ces fichiers sont des configurations et des données pour notre application, qui sont installés et utilisés sur un compte d'utilisateur restreint.Impossible d'envoyer des fichiers vers l'appareil

Il existe un dossier d'échange spécial dans le répertoire personnel de l'appareil. Une mise en page du dossier typique (pour Android 6+) est la suivante:

/storage/emulated/0    // home dir of main device user 

/storage/emulated/10   // home dir of restricted user 
/storage/emulated/10/exchange // our file exchange dir 

Récemment, nous avons découvert que l'échange de fichiers ne fonctionne pas sur un Samsung Galaxy Tab S fonctionnant sous Android 6.0.1.

// Pushing to main user works just fine 
$ ./adb push barfoo.txt /storage/emulated/0 
[ ?] /storage/emulated/0/barfoo.txt: 0/? 

// Pushing to restricted user does not work 
$ ./adb push barfoo.txt /storage/emulated/10 
adb: error: failed to copy 'barfoo.txt' to '/storage/emulated/10/barfoo.txt': Permission denied 

Dans la sortie logcat j'ai trouvé les indices suivants:

audit : type=1400 msg=audit(1496849979.822:280): avc: denied { write } for pid=15762 comm="adbd" name="10" dev="sdcardfs" ino=130656 scontext=u:r:adbd:s0 tcontext=u:object_r:container_app_data_backend:s0:c522,c768 tclass=dir 
audit : SEPF_SECMOBILE_6.0.1_0021 
audit : type=1300 msg=audit(1496849979.822:280): arch=40000028 syscall=322 per=800008 success=no exit=-13 a0=ffffff9c a1=b6bc0fc8 a2=a00c1 a3=1b6 items=1 ppid=1 ppcomm=init pid=15762 auid=4294967295 uid=2000 gid=2000 euid=2000 suid=2000 fsuid=2000 egid=2000 sgid=2000 fsgid=2000 tty=(none) ses=4294967295 comm="adbd" exe="/sbin/adbd" subj=u:r:adbd:s0 key=(null) 
audit : type=1307 msg=audit(1496849979.822:280): cwd="/" 
audit : type=1302 msg=audit(1496849979.822:280): item=0 name="/storage/emulated/10/barfoo.txt" inode=130656 dev=00:17 mode=040771 ouid=0 ogid=1015 rdev=00:00 obj=u:object_r:container_app_data_backend:s0:c522,c768 
audit : type=1327 msg=audit(1496849979.822:280): proctitle=2F7362696E2F61646264002D2D726F6F745F7365636C6162656C3D753A723A73753A7330 
audit : type=1320 msg=audit(1496849979.822:280): 

Pour autant que je crois savoir qu'il ya des politiques SELinux appliquées qui me empêchent de pousser les fichiers.

Quelqu'un peut-il reproduire ceci? Y a-t-il un moyen de desserrer les politiques SELinux? Que feriez-vous pour échanger les fichiers?

+0

Avez-vous essayé de pousser avec root? – mgokgoz

+0

Comment je fais ça? 'sudo ./adb push ... 'ne fait aucune différence. L'appareil lui-même n'est pas enraciné. Est-il possible d'exécuter 'adb push' en tant qu'utilisateur de périphérique spécifique tout comme les intentions d'appel sur adb? – lupz

+0

Cochez les options du développeur s'il y a une option d'accès root. – mgokgoz

Répondre

0

Les fichiers que vous voyez via AndroidFileTransfer ne se trouvent pas dans la route que vous essayez de pousser.

Essayez adb push barfoo.txt sdcard/. Si vous faites adb shell et cd sdcard, je parie que vous pouvez voir les mêmes fichiers que vous voyez dans AndroidFileTransfer. C'est parce qu'ils sont en fait des liens symboliques et bien que vous n'ayez pas de sdcard en soi, c'est le nom du répertoire utilisé.

+0

Merci. Je vais essayer. – lupz