forked from crowriot/apkenv
-
Notifications
You must be signed in to change notification settings - Fork 0
A compatibility layer for applications packaged as ".apk".
License
Scraft/apkenv
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
apkenv ====== A compatibility layer for applications packaged as .apk. Support website: http://thp.io/2012/apkenv/ Example module and .apk ======================= An example module is provided in modules/trg2.c - you can use this module as a basis to create your own modules. You can download the .apk that works with this example module from: http://thp.io/2011/trg2/ "Installing" applications ========================= apkenv now includes a very rudimentary facility to "install" an .apk as an application. What it really does is extract the icon from the .apk (this might not work for all .apks - we'd need to read the manifest to get the real file name and application name in all cases) and create a launcher icon that starts apkenv with the apk file as its argument. To use it, type: apkenv --install /path/to/your.apk please note that installing is not supported on the pandora port yet. softfp vs. hardfp ================= Android is softfp. Maemo 5 is softfp. MeeGo 1.2 Harmattan is hardfp. Pandora is softfp. softfp and hardfp differ in the way functions with floating point arguments get called. Trying to call a hardfp function with the softfp calling convention will not work and likely result in a crash or worse. To avoid this, you can add an attribute to function declarations to make sure that the function accepts its parameters using the softfp calling convention, like this: __attribute__((pcs("aapcs"))) There's a convenience #define in apkenv.h called "SOFTFP" with which you can decorate all functions that are either in a native library (i.e. in modules/) or that will be called from the native library (i.e. in compat/). Please note that in theory this attribute is only required on functions that pass float values in the arguments, but do it always to save you some headaches. Debugging crashes ================= First of all, enable debugging in the makefile (set DEBUG=1). Then rebuild to get a debug build with lots of debug output. You can then check which symbols get mapped from where at the linker phase (e.g. apkenv x.apk | grep 'from libc') - in general, most libc functions must be mapped in order to avoid problems (e.g. stdio functions don't work in Bionic libc, so we have to hack around these issues - the same is true for memory (de-)allocation, etc..). When you have all relevant functions mapped, ltrace'ing apkenv can help you find the library function in which it crashes - this will not list functions from Bionic libs, but only from your system libraries (another reason why it is usually a good idea to map system-level functions). Documentation ============= JNI Invocation API http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/invocation.html JNI Functions http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html JNI Types and Data Structures http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/types.html GCC Function Attributes http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html ARM Hard Float Point: VFP Comparison http://wiki.debian.org/ArmHardFloatPort/VfpComparison Android MotionEvent http://developer.android.com/reference/android/view/MotionEvent.html Third Party Code ================ All code written by me (thp) for apkenv is licensed under a simplified BSD license (see LICENSE.apkenv). However, code from third parties might be licensed under a different license, and have different copyright holders: apklib/unzip.{c,h}, apklib/ioapi.{c,h}: The MiniZip project - http://www.winimage.com/zLibDll/minizip.html Copyright (C) 1998-2010 Gilles Vollant (minizip) Copyright (C) 2007-2008 Even Rouault Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) apklib/ioapi_mem.c: ioapi implementation for accessing .zip files in memory Copyright (C) 1998-2003 Gilles Vollant Copyright (C) 2003 Justin Fletcher linker/*: The Android Bionic Linker + The Android Bionic C Library Copyright (c) 2005-2008, The Android Open Source Project jni/jni.h: libnativehelper: Support functions for Android's class libraries Copyright (C) 2006 The Android Open Source Project compat/hooks.c, compat/pthread_wrapper.c: pthread wrapper implementation based on code from libhybris Copyright (C) 2012 Carsten Munk Pandora Port ============ All code written by me (crowriot) for apkenv's pandora port is licensed under same conditions as the apkenv itself.
About
A compatibility layer for applications packaged as ".apk".
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- C 93.4%
- C++ 6.3%
- Other 0.3%