.apk files is basically only an archive to store java classes converted to the register based .dex notation.
I have been part of the IcedRobot project where we attempted to run .apk files on a regular GNU/Linux systems in combination with OpenJDK, thus i can describe what work and what is hard to do.
The easy part:
It is possible to run an java application stored in an .apk using .dex notation by using the
Daneel classloader from the IcedRobot project in combination with the java JDK shipped with Raspbian.
Every time your application wants to load a class then Daneel looks if the class exist inside the .apk or in one of the .dex files and then automatically convert the class back into a stack based .class and loads it into the JVM.
The sourcecode for this Daneel classloader exist here:
I have written a tutorial how to run .dex files using Daneel in combination with OpenJDK here:
The hard part:
Running android applications however require that the system you run these .apk file provide all the system services that a typical Android application require.
Android system services require that you run these services on a Android patched Linux kernel, because some of the services needed special support in the kernel in order to implement the Android Binder messaging and the Android security model.
The IcedRobot project contained a part called Ika where we tried to take the Android ASOP system source-code and patch this source-code to make the android system services work on a regular GNU/Linux kernel.
Ika made it possible to use the Android bluetooth stack on a GNU/Linux system. I know some users who still use this as a way to have the same access to bluetooth on GNU/Linux as on Android.
Writing all these patches turned out to be quite hard and developement of Ika has stopped due to lack of funding and manpower. And eventually we did not have funding to run the icedrobot homepage. http://www.icedrobot.org/
However the soruce-code we wrote for the ika project still exist and is hosted by the nice IcedTea project people!