Binary addon not works on Android
#1
Hi all,

I successfully compiled a static ARM binary and created an addon, which loads it as a daemon. Well, it works fine on an RPi2, but on my phone, it gives a 'No such file or directory'.... Sad

AFAIK, it caused, because the external storages (like /storage/emulated/0, or /storage/sdcard1) is mounted with the noexec flag. Which is okay, because it makes my sdcard more safety. But I want to run this binary. Big Grin

Well, is there a way to move the binaries under /data/data/org.xbmc.kodi/... folder, where hopefully, I Can run theese binaries? Or what Can I do? (Unfortunately, I haven't got root access)

Many thanks!
Reply
#2
Analysis is correct. You will have to bundle in the kodi apk or build an apk for the addon that installs into kodi dir.
Reply
#3
But I have to do that with the addon itself. The apk rebuild is an easy way, but not So elegant. And harder to install for the users.
Reply
#4
Please remember that we are not going to be keen on a binary addon being promoted here without being able to see your source code. Is it on github?
If I have helped you or increased your knowledge, click the 'thumbs up' button to give thanks :) (People with less than 20 posts won't see the "thumbs up" button.)
Reply
#5
Okay, that's true.

Will upload it to Github! Smile
Reply
#6
Cheers Smile
If I have helped you or increased your knowledge, click the 'thumbs up' button to give thanks :) (People with less than 20 posts won't see the "thumbs up" button.)
Reply
#7
Assuming your addon is not about piracy and that it's self-compiling and you can build an apk, I'm quite interested to use it as guinea pig to find out how to integrate those with Kodi...
Reply
#8
this is what i have in my 2013 notes;

'droid cannot use zip files due to noexec stuff. we should build add-ons as native packages, then tap into whatever api's droid has for managing extensions/plugins for applications. this way, add-ons can simply be separate things in the store and we do not have to do distribution mess ourself'
- investigate what apis are available (is there such an api? can we use our own frontend?).
- check whether cpack can build apk's
Reply
#9
Yep, binary addons apk is still the goal, as it's definitely how it should be.

MX Player does it to distribute its "grey" codecs, so there is definitely a way
Qt for Android uses some kind of middleware; to be investigated as well
Reply
#10
Well, my addon contains a native ARM Transmission binary, which is fully static!

I created a Git repo too, as You requested: https://github.com/MrDini123/service.transmission

This is my first addon, So please ignore my noobness! I am a hobby C developer, not python prof. Rofl

Feel free to upload Pull reqs! Wink

Thanks a lot!

Off: Is there a way to keep the daemon running, when the python script exits? Because now, it is unusable...
Reply
#11
Okay, I fixed the addon (see the linked github page). Now works nice on my RPi2. But I think it will not work on my Android device... Sad

Mod: yes, I tried to install it, and said the following error:

Code:
Traceback (most recent call last):
                                              File "/storage/emulated/0/Android/data/org.xbmc.kodi/files/.kodi/addons/service.transmission/default.py", line 30, in <module>
                                                startTransmission()
                                              File "/storage/emulated/0/Android/data/org.xbmc.kodi/files/.kodi/addons/service.transmission/default.py", line 15, in startTransmission
                                                subprocess.call('chmod +x ' + __path__ + '/bin/*', shell=True)
                                              File "/home/jenkins/workspace/Android-ARM/tools/depends/xbmc-depends/arm-linux-androideabi-android-17/lib/python2.6/subprocess.py", line 480, in call
                                              File "/home/jenkins/workspace/Android-ARM/tools/depends/xbmc-depends/arm-linux-androideabi-android-17/lib/python2.6/subprocess.py", line 633, in __init__
                                              File "/home/jenkins/workspace/Android-ARM/tools/depends/xbmc-depends/arm-linux-androideabi-android-17/lib/python2.6/subprocess.py", line 1139, in _execute_child
                                            OSError: [Errno 2] No such file or directory
                                            -->End of Python script error report<--

Well, it looks like a compile error, because this Jenkins folder doesn't exist on my device:

/home/jenkins/workspace/Android-ARM/tools/depends/xbmc-depends/arm-linux-androideabi-android-17/lib/python2.6/
Reply
#12
If you would tell where it prints out that jenkins path i could guess that this is not a path which it tries to access during runtime but a path which it prints out for debug purposes and which just is an information which was collected during compile time...
AppleTV4/iPhone/iPod/iPad: HowTo find debug logs and everything else which the devs like so much: click here
HowTo setup NFS for Kodi: NFS (wiki)
HowTo configure avahi (zeroconf): Avahi_Zeroconf (wiki)
READ THE IOS FAQ!: iOS FAQ (wiki)
Reply
#13
Probably first thing first. How did you compile the "*.bin" in your repo?

And that has little chance to work on droid:
Code:
subprocess.call('chmod +x ' + __path__ + '/bin/*', shell=True)
  cmd = __path__+'/bin/transmission.start '+__path__
  subprocess.call(cmd, shell=True)
Reply
#14
(2017-02-11, 13:46)Memphiz Wrote: If you would tell where it prints out that jenkins path i could guess that this is not a path which it tries to access during runtime but a path which it prints out for debug purposes and which just is an information which was collected during compile time...

I copied this part from the kodi.log file.
Reply
#15
(2017-02-11, 13:50)Koying Wrote: Probably first thing first. How did you compile the "*.bin" in your repo?

And that has little chance to work on droid:
Code:
subprocess.call('chmod +x ' + __path__ + '/bin/*', shell=True)
  cmd = __path__+'/bin/transmission.start '+__path__
  subprocess.call(cmd, shell=True)

I compiled theese binaries on an ARMv5 box. So it runs on RPi1, Rpi2, Rpi3 and on Android too, if I copy the binaries under the data partition, and run from here.

I forced the static flag, So theese binaries are static and theese only require a libc.so.6 and a linker.

Thanks for the code, will try it! But if the internal storage mounted with noexec flag, the chmod +x has no effect. I Cannot start binaries from here. I Can only run it from data system, etc partitions. But theese folders Can only accessible, when I have root permissions... Sad
Reply

Logout Mark Read Team Forum Stats Members Help
Binary addon not works on Android0