@@ -9,27 +9,37 @@ for android as p4a in this documentation.
99Concepts
1010--------
1111
12- - requirements: For p4a, your applications dependencies are
13- requirements similar to the standard `requirements.txt `, but with
14- one difference: p4a will search for a recipe first instead of
15- installing requirements with pip.
12+ *Basic: *
1613
17- - recipe: A recipe is a file that defines how to compile a
18- requirement. Any libraries that have a Python extension *must * have
19- a recipe in p4a, or compilation will fail. If there is no recipe for
20- a requirement, it will be downloaded using pip.
14+ - **requirements: ** For p4a, all your app's dependencies must be specified
15+ via ``--requirements `` similar to the standard `requirements.txt `.
16+ (Unless you specify them via a `setup.py `/`install_requires `)
17+ All dependencies will be mapped to "recipes" if any exist, so that
18+ many common libraries will just work. See "recipe" below for details.
2119
22- - build: A build refers to a compiled recipe.
20+ - **distribution: ** A distribution is the final "build" of your
21+ compiled project + requirements, as an Android project assembled by
22+ p4a that can be turned directly into an APK. p4a can contain multiple
23+ distributions with different sets of requirements.
2324
24- - distribution: A distribution is the final "build" of all your
25- compiled requirements, as an Android project that can be turned
26- directly into an APK. p4a can contain multiple distributions with
27- different sets of requirements.
25+ - **build: ** A build refers to a compiled recipe or distribution.
2826
29- - bootstrap: A bootstrap is the app backend that will start your
30- application. Your application could use SDL2 as a base,
31- or a web backend like Flask with a WebView bootstrap. Different
32- bootstraps can have different build options.
27+ - **bootstrap: ** A bootstrap is the app backend that will start your
28+ application. The default for graphical applications is SDL2.
29+ You can also use e.g. the webview for web apps, or service_only for
30+ background services. Different bootstraps have different additional
31+ build options.
32+
33+ *Advanced: *
34+
35+ - **recipe: **
36+ A recipe is a file telling p4a how to install a requirement
37+ that isn't by default fully Android compatible.
38+ This is often necessary for Cython or C/C++-using python extensions.
39+ p4a has recipes for many common libraries already included, and any
40+ dependency you specified will be automatically mapped to its recipe.
41+ If a dependency doesn't work and has no recipe included in p4a,
42+ then it may need one to work.
3343
3444
3545Installation
@@ -75,14 +85,20 @@ install most of these with::
7585On Arch Linux (64 bit) you should be able to run the following to
7686install most of the dependencies (note: this list may not be
7787complete). gcc-multilib will conflict with (and replace) gcc if not
78- already installed. If your installation is already 32-bit, install the
79- same packages but without ``lib32- `` or ``-multilib ``::
88+ already installed::
8089
8190 sudo pacman -S jdk7-openjdk python2 python2-pip python2-kivy mesa-libgl lib32-mesa-libgl lib32-sdl2 lib32-sdl2_image lib32-sdl2_mixer sdl2_ttf unzip gcc-multilib gcc-libs-multilib
8291
8392Installing Android SDK
8493~~~~~~~~~~~~~~~~~~~~~~
8594
95+ .. warning ::
96+ python-for-android is often picky about the **SDK/NDK versions. **
97+ Pick the recommended ones from below to avoid problems.
98+
99+ Basic SDK install
100+ `````````````````
101+
86102You need to download and unpack the Android SDK and NDK to a directory (let's say $HOME/Documents/):
87103
88104- `Android SDK <https://developer.android.com/studio/index.html >`_
@@ -94,31 +110,22 @@ named ``tools``, and you will need to run extra commands to install
94110the SDK packages needed.
95111
96112For Android NDK, note that modern releases will only work on a 64-bit
97- operating system. The minimal, and recommended, NDK version to use is r17c:
113+ operating system. ** The minimal, and recommended, NDK version to use is r17c: **
98114
99115 - `Go to ndk downloads page <https://developer.android.com/ndk/downloads/ >`_
100116 - Windows users should create a virtual machine with an GNU Linux os
101117 installed, and then you can follow the described instructions from within
102118 your virtual machine.
103119
104- If you are using a 32-bit distribution (or hardware),
105- the latest usable NDK version is r10e, which can be downloaded here:
106120
107- - `Legacy 32-bit Linux NDK r10e <http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86.bin >`_
121+ Platform and build tools
122+ ````````````````````````
108123
109- .. warning ::
110- **32-bit distributions **
111-
112- Since the python2 recipe updated to version 2.7.15, the build system has
113- been changed and you should use an old release of python-for-android, which
114- contains the legacy python recipe (v2.7.2). The last python-for-android
115- release with the legacy version of python is version
116- `0.6.0 <https://github.com/kivy/python-for-android/archive/0.6.0.zip >`_.
117-
118- First, install an API platform to target. You can replace ``27 `` with
119- a different platform number, but keep in mind **other API versions
120- are less well-tested **, and older devices are still supported
121- (down to the specified *minimum * API/NDK API level):
124+ First, install an API platform to target. **The recommended *target* API
125+ level is 27 **, you can replace it with a different number but
126+ keep in mind other API versions are less well-tested and older devices
127+ are still supported down to the **recommended specified *minimum*
128+ API/NDK API level 21 **:
122129
123130 $SDK_DIR/tools/bin/sdkmanager "platforms;android-27"
124131
@@ -128,13 +135,17 @@ possibilities, but 26.0.2 is the latest version at the time of writing::
128135
129136 $SDK_DIR/tools/bin/sdkmanager "build-tools;26.0.2"
130137
131- Then, you can edit your ``~/.bashrc `` or other favorite shell to include new environment variables necessary for building on android::
138+ Configure p4a to use your SDK/NDK
139+ `````````````````````````````````
140+
141+ Then, you can edit your ``~/.bashrc `` or other favorite shell to include new environment
142+ variables necessary for building on android::
132143
133144 # Adjust the paths!
134145 export ANDROIDSDK="$HOME/Documents/android-sdk-27"
135146 export ANDROIDNDK="$HOME/Documents/android-ndk-r17c"
136- export ANDROIDAPI="26 " # Target API version of your application
137- export NDKAPI="19 " # Minimum supported API version of your application
147+ export ANDROIDAPI="27 " # Target API version of your application
148+ export NDKAPI="21 " # Minimum supported API version of your application
138149 export ANDROIDNDKVER="r10e" # Version of the NDK you installed
139150
140151You have the possibility to configure on any command the PATH to the SDK, NDK and Android API using:
@@ -158,9 +169,9 @@ and the requirements::
158169
159170 p4a apk --private $HOME/code/myapp --package=org.example.myapp --name "My application" --version 0.1 --bootstrap=sdl2 --requirements=python3,kivy
160171
161- **Note on ` --requirements`: you must add all
172+ **Note on ** `` --requirements ``: ** you must add all
162173libraries/dependencies your app needs to run. **
163- Example: `--requirements=python3,kivy,vispy `. For an SDL2 app,
174+ Example: `` --requirements=python3,kivy,vispy ` `. For an SDL2 app,
164175`kivy ` is not needed, but you need to add any wrappers you might
165176use (e.g. `pysdl2 `).
166177
@@ -175,8 +186,6 @@ an `.apk` file.
175186 it will possibly no longer receive patches by the python creators
176187 themselves in 2020. Migration to Python 3 is recommended!
177188
178- - You can also use ``--bootstrap=pygame ``, but this bootstrap
179- is deprecated and not well-tested.
180189
181190Build a WebView application
182191~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -188,7 +197,7 @@ well as the requirements::
188197 p4a apk --private $HOME/code/myapp --package=org.example.myapp --name "My WebView Application" --version 0.1 --bootstrap=webview --requirements=flask --port=5000
189198
190199**Please note as with kivy/SDL2, you need to specify all your
191- additional requirements/depenencies . **
200+ additional requirements/dependencies . **
192201
193202You can also replace flask with another web framework.
194203
0 commit comments