Thanks for posting this question. I'm also in a position where it'd dramatically speed up my deploy/test cycle to have my app load a .so file rather than rebuild the app each time.
Just something to watch out for: run-as is broken on Samsung devices: https://stackoverflow.com/questions/37413667/run-as-could-not-set-capabilities-operation-not-permitted On Wednesday, September 26, 2018 at 2:15:26 PM UTC+1, Tomas Dirvanauskas wrote: > > Thank you so much, that did the trick. I went with 'adb shell "cat > /data/local/tmp/myfile.so | run-as <app-user> sh -c 'cat > > <app-directory>/cache/myfile.so'" because I wanted for this to work on > retail phones as well, and it works perfectly now. Tested both on Google > Pixel with Android 8.0 and emulator. > > P.S <app-user> in this case is a package name, right? > > > On Tuesday, September 25, 2018 at 2:41:22 PM UTC+3, Tomas Dirvanauskas > wrote: >> >> Hey, >> >> let me shortly explain what I am trying to achieve. >> >> For development purposes, I want to perform quick iteration during my app >> development. So instead of doing: >> >> * Change some native code >> * Compile library >> * Package apk >> * Install apk >> * Run apk >> >> I want to do: >> >> * Change some native code >> * Compile library >> * Send .so file to the device >> * Restart the app >> >> >> After doing initial apk installation, I push only single .so file to the >> device (/data/data/com.Tomas.MyApplication/cache/) and instruct the app to >> check that location first, if it finds a library there it will try to load >> that library instead of the one from /data/app folder. >> >> I am loading the library like this - >> dlopen("/data/data/com.Tomas.MyApplication/files/libmylibrary.so", >> RTLD_NOW); >> >> And it works fine on Android 6.0, but doesn't work on Android 8.0, dlopen >> returns 0. >> >> The error is: >> 09-25 10:11:04.395 23925 23925 W Main: type=1400 audit(0.0:49): avc: >> denied { open } for path="/data/data/com.Tomas.MyApplication/cache/ >> libmylibrary.so" dev="dm-0" ino=112773 >> scontext=u:r:untrusted_app:s0:c512,c768 >> tcontext=u:object_r:app_data_file:s0 tclass=file permissive=0 >> >> I assume this is somehow related to this - >> https://developer.android.com/about/versions/nougat/android-7.0-changes#ndk-errors >> >> Is there any way to workaround this? Like I said this is strictly for >> development purposes to speed up iteration time. >> >> P.S I also tried putting libmylibrary.so file to >> /storage/emulated/0/Android/data/com.Tomas.MyApplication/cache// >> libmylibrary.so" , and tried using dlopen, but that fails both on >> Android 6.0 and Android 8.0 >> >> >> >> -- You received this message because you are subscribed to the Google Groups "Android Security Discussions" group. To unsubscribe from this group and stop receiving emails from it, send an email to android-security-discuss+unsubscr...@googlegroups.com. Visit this group at https://groups.google.com/group/android-security-discuss. For more options, visit https://groups.google.com/d/optout.