Building OpenCV4Android from trunk
Version 10 (Alexander Smorkalov, 2014-10-02 11:43 am)
1 | 7 | Alexander Smorkalov | h2. Building OpenCV4Android from trunk |
---|---|---|---|
2 | 1 | ||
3 | 1 | {{>toc}} |
|
4 | 1 | ||
5 | 1 | The new android build is based on android-cmake project originally developed by Ethan Rublee. |
|
6 | 1 | You can find the latest version of his project at http://code.google.com/p/android-cmake/ |
|
7 | 1 | ||
8 | 1 | h2. Prerequisites |
|
9 | 1 | ||
10 | 9 | Alexander Smorkalov | * git client |
11 | 1 | * cmake tool http://www.cmake.org/ |
|
12 | 1 | * Android NDK (revision !r5 or newer) http://developer.android.com/sdk/ndk/index.html |
|
13 | 9 | Alexander Smorkalov | * OpenCV master: git://code.opencv.org/opencv.git. Github mirror: git://github.com/itseez/opencv.git. You can clone repo with the following command: |
14 | 9 | Alexander Smorkalov | <pre>git clone git://code.opencv.org/opencv.git</pre> |
15 | 1 | ||
16 | 1 | h2. Additional requirements for Java wrapper and Android samples |
|
17 | 1 | ||
18 | 1 | * JDK 6 http://www.oracle.com/technetwork/java/javase/downloads/index.html |
|
19 | 1 | * Android SDK http://developer.android.com/sdk/index.html |
|
20 | 1 | ** "Android SDK Tools, revision 14" or newer is recommended |
|
21 | 1 | ** "SDK platform Android 2.2, API 8" or newer package installed (for the Java API and tests) |
|
22 | 1 | ** "SDK platform Android 3.0, API 11" or newer for the samples (they can run on Android 2.2 but require API 11 at compile time) |
|
23 | 1 | * Apache Ant 1.8.0 or newer http://ant.apache.org |
|
24 | 1 | * Python 2.6 or newer (but not 3.x) http://www.python.org/ |
|
25 | 1 | ||
26 | 1 | h2. Windows additional prerequisites |
|
27 | 1 | ||
28 | 1 | At the moment OpenCV cross compilation under @cygwin@ is *not supported*. |
|
29 | 1 | ||
30 | 1 | However you can cross-compile OpenCV on Windows using '''native port of make'''. |
|
31 | 1 | Android NDK !r7 and newer already includes the make executable. |
|
32 | 8 | Alexander Smorkalov | If you need to build OpenCV with older NDK, then you can get it from NDK or use one of alternative downloads. These two are tested to work for OpenCV: |
33 | 1 | * http://gnuwin32.sourceforge.net/packages/make.htm |
|
34 | 1 | * http://code.google.com/p/mingw-and-ndk/ (see "make-3.7z" under the Downloads section) |
|
35 | 1 | ||
36 | 1 | h1. OpenCV build |
|
37 | 1 | ||
38 | 1 | By default OpenCV and the most of Android samples are configured for modern @ARM-v7a@ architecture. |
|
39 | 5 | Alexander Smorkalov | If you want to compile OpenCV for emulator or older device, or want to build with NEON support please read the [[Trunk OpenCV for Android#Android-hardware-targets|Android targets]] section for instructions. |
40 | 1 | ||
41 | 1 | h2. Linux (Ubuntu) and Mac OS (10.6.7) |
|
42 | 1 | ||
43 | 1 | Export full path to your copy of NDK |
|
44 | 1 | <pre> |
|
45 | 8 | Alexander Smorkalov | export ANDROID_NDK=~/android-ndk-r8b |
46 | 1 | </pre> |
|
47 | 1 | ||
48 | 1 | Alternatively to build with standalone toolchain extracted from NDK you can export toolchain location |
|
49 | 1 | <pre> |
|
50 | 1 | export ANDROID_STANDALONE_TOOLCHAIN=~/android-toolchain |
|
51 | 1 | </pre> |
|
52 | 1 | ||
53 | 1 | If you have not declared any of these variables then build scripts will try to find NDK under the @/opt@ folder |
|
54 | 8 | Alexander Smorkalov | (so if you have placed your NDK to @/opt/android-ndk-r8b/@ then it will be detected automatically). |
55 | 1 | ||
56 | 1 | There is a @scripts@ folder in the @android@ folder for running cmake with the proper cache |
|
57 | 1 | variables set. It is recommended that you use this to setup a cmake build directory. |
|
58 | 1 | <pre> |
|
59 | 1 | cd opencv/android |
|
60 | 1 | sh ./scripts/cmake_android.sh |
|
61 | 1 | </pre> |
|
62 | 1 | ||
63 | 1 | You should now see a build directory, that is ready to be made |
|
64 | 1 | <pre> |
|
65 | 1 | cd build |
|
66 | 1 | make -j8 |
|
67 | 1 | </pre> |
|
68 | 1 | ||
69 | 8 | Alexander Smorkalov | That will build most of the OpenCV modules, except for those that don't make sense on android - @gpu@, @ocl@, @python@ wrapper etc.. |
70 | 1 | ||
71 | 1 | h2. Windows (native) |
|
72 | 1 | ||
73 | 1 | Define the following environment variables: |
|
74 | 1 | * @ANDROID_NDK@ - full path to the Android NDK. This path should not have tailing slash. |
|
75 | 1 | * @CMAKE_EXE@ - full path to cmake executable (including executable name). |
|
76 | 1 | * @MAKE_EXE@ - full path to native port of make (including executable name). This path should not contain spaces. |
|
77 | 1 | ||
78 | 1 | Instead of modifying your environment you can create file @opencv\android\scripts\wincfg.cmd@ and put all settings into this file. OpenCV provides a template for this file named @opencv\android\scripts\wincmd.cfg.tmpl@. Please note that settings from @wincfg.cmd@ takes precedence over global environment variables. |
|
79 | 1 | ||
80 | 1 | Then open Windows console (@cmd.exe@) and go to @opencv\android@ folder. Run script @cmake_android.cmd@ from the @scripts@ folder: |
|
81 | 1 | <pre> |
|
82 | 1 | cd opencv\android\ |
|
83 | 1 | scripts\cmake_android.cmd |
|
84 | 1 | </pre> |
|
85 | 1 | When script finishes you will have OpenCV compiled. |
|
86 | 1 | ||
87 | 1 | h3. Troubleshooting |
|
88 | 1 | ||
89 | 1 | First, make sure that paths to OpenCV sources, Android NDK and @make.exe@ do not contain spaces and other suspicious symbols. |
|
90 | 1 | ||
91 | 1 | If @make@ fails with message similar to |
|
92 | 1 | <pre> |
|
93 | 1 | *** target pattern contains no `%'. Stop. |
|
94 | 1 | </pre> |
|
95 | 1 | Then you are probably using @cygwin@ tools instead of their native ports. Remove @cygwin@ from your @PATH@, delete @build@ directory and rebuild. |
|
96 | 1 | ||
97 | 1 | Or if @make@ fails with Java related messages, then make sure your version of python is a Windows app instead of the @cygwin@ one, such as "ActiveState Python v2.7":http://www.activestate.com/activepython/downloads. |
|
98 | 1 | ||
99 | 1 | ||
100 | 1 | h1. Building console "Hello World" with OpenCV |
|
101 | 1 | ||
102 | 1 | This application is not usual Android application. This is a Unix console which may be used as a template for development. Console application is much more convenient for development, debugging and performance optimization stages. Then, if you are finished with your CV algorithm, you can switch to normal Android development with Java + NDK. |
|
103 | 1 | ||
104 | 1 | h2. Prerequisities |
|
105 | 1 | ||
106 | 1 | First of all you need an Android device with root privileges. The goal is to have ability to run console applications on Android device using @adb shell@. Even @chmod@ is not available by default (for example on Nexus One). You have the following options: |
|
107 | 1 | * Use emulator |
|
108 | 1 | * Enable root access to your device. Use ''Google'':http://google.com to find instructions for your device. |
|
109 | 1 | * Use developer device, for example NVidia Tegra devkits have root access by default. |
|
110 | 1 | ||
111 | 1 | If the device allows you to do @chmod@ and run executables, then follow the instructions below. |
|
112 | 1 | ||
113 | 1 | Second, you need OpenCV compiled for your device. *This sample is configured for emulator. It is different from default settings for OpenCV.* Read [[Trunk OpenCV for Android#Android-hardware-targets|Android ABIs]] to know how to build OpenCV for emulator. |
|
114 | 5 | Alexander Smorkalov | Also you need some free space on sdcard to run the @HelloAndroid@ application - it will write small image to @/mnt/sdcard@. *Please note*, that even with emulator you need a sdcard. You can create it with @AVD Manager@ from Android SDK. |
115 | 1 | ||
116 | 2 | Alexander Smorkalov | h2. Linux (Ubuntu) and Mac OS (10.6.7) |
117 | 2 | Alexander Smorkalov | |
118 | 2 | Alexander Smorkalov | Export full path to your copy of NDK |
119 | 2 | Alexander Smorkalov | <pre> |
120 | 8 | Alexander Smorkalov | export ANDROID_NDK=~/android-ndk-r8b |
121 | 2 | Alexander Smorkalov | </pre> |
122 | 2 | Alexander Smorkalov | or path to standalone toolchain |
123 | 2 | Alexander Smorkalov | <pre> |
124 | 2 | Alexander Smorkalov | export ANDROID_STANDALONE_TOOLCHAIN=~/android-toolchain |
125 | 2 | Alexander Smorkalov | </pre> |
126 | 2 | Alexander Smorkalov | |
127 | 2 | Alexander Smorkalov | Run the following commands to build project |
128 | 2 | Alexander Smorkalov | <pre> |
129 | 2 | Alexander Smorkalov | cd opencv/samples/android/hello-android |
130 | 2 | Alexander Smorkalov | sh ./cmake_android.sh |
131 | 2 | Alexander Smorkalov | cd ./build_armeabi |
132 | 2 | Alexander Smorkalov | make |
133 | 2 | Alexander Smorkalov | cd .. |
134 | 2 | Alexander Smorkalov | </pre> |
135 | 2 | Alexander Smorkalov | |
136 | 2 | Alexander Smorkalov | Connect to your device with @adb@ tool from Android SDK and run the application |
137 | 2 | Alexander Smorkalov | <pre> |
138 | 2 | Alexander Smorkalov | sh ./run.sh |
139 | 2 | Alexander Smorkalov | </pre> |
140 | 2 | Alexander Smorkalov | |
141 | 2 | Alexander Smorkalov | If you can see @HelloAndroid.png@ in your current directory and @Hello Android!@ message in the console - you've arrived. |
142 | 2 | Alexander Smorkalov | |
143 | 2 | Alexander Smorkalov | If you want to build this sample for @ARM-v7a@ device (with or without NEON support) you need to edit @cmake_android.sh@ script. Change @BUILD_DIR@ path and @ANDROID_ABI@ CMake parameter. |
144 | 2 | Alexander Smorkalov | |
145 | 2 | Alexander Smorkalov | h2. Windows |
146 | 2 | Alexander Smorkalov | |
147 | 2 | Alexander Smorkalov | Set the same environment variables as needed for OpenCV build (variables set in @opencv\android\scripts\wincfg.cmd@ work as well). |
148 | 2 | Alexander Smorkalov | If you are using @wincfg.cmd@ file then ensure that @ANDROID_ABI@ and @BUILD_DIR@ are set to correct values. Use the following values for emulator: |
149 | 2 | Alexander Smorkalov | <pre> |
150 | 2 | Alexander Smorkalov | SET BUILD_DIR=build_armeabi |
151 | 2 | Alexander Smorkalov | SET ANDROID_ABI=armeabi |
152 | 2 | Alexander Smorkalov | </pre> |
153 | 2 | Alexander Smorkalov | |
154 | 2 | Alexander Smorkalov | When all variables are set run the commands |
155 | 2 | Alexander Smorkalov | <pre> |
156 | 2 | Alexander Smorkalov | cd opencv\samples\android\hello-android |
157 | 2 | Alexander Smorkalov | cmake_android.cmd |
158 | 2 | Alexander Smorkalov | </pre> |
159 | 2 | Alexander Smorkalov | |
160 | 2 | Alexander Smorkalov | Connect to your device with @adb@ tool from Android SDK and run the script |
161 | 2 | Alexander Smorkalov | <pre> |
162 | 2 | Alexander Smorkalov | run.cmd |
163 | 2 | Alexander Smorkalov | </pre> |
164 | 2 | Alexander Smorkalov | |
165 | 2 | Alexander Smorkalov | If you can see @HelloAndroid.png@ in your current directory and "Hello Android!" message in console - you've arrived. |
166 | 2 | Alexander Smorkalov | |
167 | 1 | h3. Troubleshooting |
|
168 | 2 | Alexander Smorkalov | |
169 | 1 | If you see error message similar to |
|
170 | 2 | Alexander Smorkalov | <pre> |
171 | 2 | Alexander Smorkalov | ld: cannot find -lopencv_contrib |
172 | 2 | Alexander Smorkalov | </pre> |
173 | 2 | Alexander Smorkalov | or (on Windows) |
174 | 2 | Alexander Smorkalov | <pre> |
175 | 2 | Alexander Smorkalov | ld.exe: cannot find -lopencv_contrib240 |
176 | 2 | Alexander Smorkalov | </pre> |
177 | 2 | Alexander Smorkalov | It means that CMake failed to find OpenCV compiled for Android. Check that all paths are set to correct values, remove @build@ directory and try to rebuild the application. |
178 | 2 | Alexander Smorkalov | |
179 | 2 | Alexander Smorkalov | h1. Native camera support in OpenCV |
180 | 2 | Alexander Smorkalov | |
181 | 2 | Alexander Smorkalov | Native interface of Android camera is platform-dependent. So OpenCV isolates platform-dependent part of code into separate shared library and provides several prebuilt libraries for native camera: |
182 | 2 | Alexander Smorkalov | * @libnative_camera_r2.2.0.so@ |
183 | 2 | Alexander Smorkalov | * @libnative_camera_r2.3.3.so@ |
184 | 2 | Alexander Smorkalov | * @libnative_camera_r3.0.1.so@ |
185 | 2 | Alexander Smorkalov | * @libnative_camera_r4.0.0.so@ |
186 | 2 | Alexander Smorkalov | * @libnative_camera_r4.0.3.so@ |
187 | 8 | Alexander Smorkalov | * @libnative_camera_r4.1.1.so@ |
188 | 2 | Alexander Smorkalov | |
189 | 8 | Alexander Smorkalov | These libraries are tested to work for Android 2.2.0, 2.2.1, 2.2.2, 2.3.3, 2.3.4, 3.0.1, 3.2.1, 4.0.0, 4.0.3, 4.1.1. |
190 | 2 | Alexander Smorkalov | You should include these libraries into your .apk to get camera working. OpenCV will automatically load one of these libraries compatible with your Android OS version. |
191 | 2 | Alexander Smorkalov | |
192 | 2 | Alexander Smorkalov | h2. Use native camera in your Android project (Java) |
193 | 2 | Alexander Smorkalov | |
194 | 2 | Alexander Smorkalov | See android samples for example of native camera application. |
195 | 2 | Alexander Smorkalov | This one - @opencv/samples/android/tutorial-2-opencvcamera@ is a good point to start. |
196 | 2 | Alexander Smorkalov | |
197 | 2 | Alexander Smorkalov | h2. Use native camera in your NDK project (C++) |
198 | 2 | Alexander Smorkalov | |
199 | 2 | Alexander Smorkalov | Tutorial is coming... |
200 | 2 | Alexander Smorkalov | |
201 | 2 | Alexander Smorkalov | h2. Use native camera in your cmake project (C++) |
202 | 2 | Alexander Smorkalov | |
203 | 2 | Alexander Smorkalov | Include the @highgui.hpp@ header to you source |
204 | 2 | Alexander Smorkalov | <pre><code class="cpp"> |
205 | 2 | Alexander Smorkalov | #include "opencv2/highgui/highgui.hpp" |
206 | 2 | Alexander Smorkalov | </code></pre> |
207 | 2 | Alexander Smorkalov | |
208 | 2 | Alexander Smorkalov | Create a new instance of @VideoCapture@ and start grabbing frames |
209 | 2 | Alexander Smorkalov | <pre><code class="cpp"> |
210 | 2 | Alexander Smorkalov | cv::VideoCapture capture(CV_CAP_ANDROID + 0); |
211 | 2 | Alexander Smorkalov | //cv::VideoCapture capture(CV_CAP_ANDROID + 1);//front camera for Android 2.3.3 or newer |
212 | 2 | Alexander Smorkalov | |
213 | 2 | Alexander Smorkalov | if( !capture.isOpened() ) |
214 | 2 | Alexander Smorkalov | return; |
215 | 2 | Alexander Smorkalov | |
216 | 2 | Alexander Smorkalov | capture.set(CV_CAP_PROP_FRAME_WIDTH, 640); |
217 | 2 | Alexander Smorkalov | capture.set(CV_CAP_PROP_FRAME_HEIGHT, 480); |
218 | 2 | Alexander Smorkalov | |
219 | 2 | Alexander Smorkalov | for(int i=0; i < 100; ++i) |
220 | 2 | Alexander Smorkalov | { |
221 | 2 | Alexander Smorkalov | cv::Mat frame; |
222 | 2 | Alexander Smorkalov | |
223 | 2 | Alexander Smorkalov | capture >> frame; |
224 | 2 | Alexander Smorkalov | if( !frame.empty() ) |
225 | 2 | Alexander Smorkalov | yourfunction::processFrame(frame); |
226 | 2 | Alexander Smorkalov | } |
227 | 2 | Alexander Smorkalov | </code></pre> |
228 | 2 | Alexander Smorkalov | |
229 | 2 | Alexander Smorkalov | Finally, add following lines to your cmake |
230 | 2 | Alexander Smorkalov | <pre> |
231 | 2 | Alexander Smorkalov | if (COMMAND COPY_NATIVE_CAMERA_LIBS) |
232 | 2 | Alexander Smorkalov | COPY_NATIVE_CAMERA_LIBS(${PROJECT_NAME}) |
233 | 2 | Alexander Smorkalov | endif() |
234 | 2 | Alexander Smorkalov | </pre> |
235 | 2 | Alexander Smorkalov | Where @PROJECT_NAME@ variable contains name of module that uses native camera. |
236 | 2 | Alexander Smorkalov | |
237 | 2 | Alexander Smorkalov | *Warning: Native camera from OpenCV does not work inside console applications.* |
238 | 2 | Alexander Smorkalov | |
239 | 2 | Alexander Smorkalov | h2. Advanced: build your camera wrapper |
240 | 2 | Alexander Smorkalov | |
241 | 2 | Alexander Smorkalov | If prebuilt libraries don't work for you for whatever reason then you can build your own camera wrapper lib. |
242 | 2 | Alexander Smorkalov | |
243 | 2 | Alexander Smorkalov | To build your lib you have to download sources for your version of Android and build entire OS first. |
244 | 2 | Alexander Smorkalov | See http://source.android.com/source/downloading.html and ''google'' for instructions. |
245 | 2 | Alexander Smorkalov | |
246 | 2 | Alexander Smorkalov | When you finish with Android OS run cmake for OpenCV (@scripts/cmake_android.sh@ will run it for you). You should see following line in its output |
247 | 2 | Alexander Smorkalov | <pre> |
248 | 2 | Alexander Smorkalov | -- AndroidNativeCamera: use prebuilt libraries |
249 | 2 | Alexander Smorkalov | </pre> |
250 | 2 | Alexander Smorkalov | |
251 | 2 | Alexander Smorkalov | Next, you need to set cmake cache variable @ANDROID_SOURCE_TREE@ to the path to Android OS source tree and rerun cmake. (You can set this variable with @cmake-gui@ application, or editing @build/CMakeCache.txt@ file with text editor, or passing it as cmake argument). |
252 | 2 | Alexander Smorkalov | |
253 | 2 | Alexander Smorkalov | If path is set correctly then you should see line similar to following in cmake output |
254 | 2 | Alexander Smorkalov | <pre> |
255 | 2 | Alexander Smorkalov | -- AndroidNativeCamera: build for Android 2.3.4 |
256 | 2 | Alexander Smorkalov | </pre> |
257 | 2 | Alexander Smorkalov | |
258 | 2 | Alexander Smorkalov | Run @make@ command to compile the sources. |
259 | 2 | Alexander Smorkalov | |
260 | 2 | Alexander Smorkalov | Most probably you will need to make changes in file @opencv/modules/androidcamera/camera_wrapper/camera_wrapper.cpp@ to fix compiler errors. |
261 | 2 | Alexander Smorkalov | If you do some changes please post your patch to [[WikiStart|OpenCV issue tracker]] to help with OpenCV development. |
262 | 2 | Alexander Smorkalov | |
263 | 2 | Alexander Smorkalov | h3. Example |
264 | 2 | Alexander Smorkalov | |
265 | 2 | Alexander Smorkalov | Building wrapper library for Android 4.0.3: |
266 | 2 | Alexander Smorkalov | |
267 | 2 | Alexander Smorkalov | <pre> |
268 | 2 | Alexander Smorkalov | cd openvc/android |
269 | 2 | Alexander Smorkalov | mkdir build_camera |
270 | 2 | Alexander Smorkalov | cd build_camera |
271 | 2 | Alexander Smorkalov | cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake -DANDROID_SOURCE_TREE=~/Android/4.0.3/src -DANDROID_NATIVE_API_LEVEL=14 -DANDROID_USE_STLPORT=ON ../../ |
272 | 2 | Alexander Smorkalov | make native_camera_r4.0.3 |
273 | 2 | Alexander Smorkalov | </pre> |
274 | 2 | Alexander Smorkalov | |
275 | 2 | Alexander Smorkalov | h1. Advanced build options |
276 | 2 | Alexander Smorkalov | |
277 | 2 | Alexander Smorkalov | h2. Using OpenCV in your own CMake projects |
278 | 2 | Alexander Smorkalov | |
279 | 2 | Alexander Smorkalov | Use the CMake find script for OpenCV |
280 | 2 | Alexander Smorkalov | <pre> |
281 | 2 | Alexander Smorkalov | find_package(OpenCV REQUIRED) |
282 | 2 | Alexander Smorkalov | </pre> |
283 | 2 | Alexander Smorkalov | Export path to OpenCV source tree |
284 | 2 | Alexander Smorkalov | <pre> |
285 | 2 | Alexander Smorkalov | export OPENCV_ROOT=~/opencv |
286 | 2 | Alexander Smorkalov | </pre> |
287 | 2 | Alexander Smorkalov | Then when you run cmake, use: |
288 | 2 | Alexander Smorkalov | <pre> |
289 | 2 | Alexander Smorkalov | cmake -DOpenCV_DIR=$OPENCV_ROOT/android/build -DCMAKE_TOOLCHAIN_FILE=$OPENCV_ROOT/android/android.toolchain.cmake .. |
290 | 2 | Alexander Smorkalov | </pre> |
291 | 1 | ||
292 | 2 | Alexander Smorkalov | And direct your cmake cache for @OpenCV_DIR@ to the path where you built OpenCV for Android. |
293 | 2 | Alexander Smorkalov | something like : @opencv/android/build@ |
294 | 2 | Alexander Smorkalov | |
295 | 2 | Alexander Smorkalov | To avoid setting the cmake cache for @OpenCV_DIR@, you can just "install" OpenCV to your |
296 | 2 | Alexander Smorkalov | Android toolchain/NDK. Run the following from the @opencv/android/build@ path: |
297 | 2 | Alexander Smorkalov | <pre> |
298 | 2 | Alexander Smorkalov | make install/strip |
299 | 2 | Alexander Smorkalov | </pre> |
300 | 2 | Alexander Smorkalov | |
301 | 1 | h2. Android hardware targets |
|
302 | 1 | ||
303 | 1 | You may wish to build OpenCV and samples for multiple hardware targets. |
|
304 | 1 | ||
305 | 1 | Just change the cmake cache @ANDROID_ABI@ to either: |
|
306 | 1 | * @armeabi@ |
|
307 | 2 | Alexander Smorkalov | * @armeabi-v7a@ |
308 | 2 | Alexander Smorkalov | * @armeabi-v7a with NEON@ |
309 | 1 | * @armeabi-v7a with VFPV3@ |
|
310 | 1 | * @armeabi-v6 with VFP@ |
|
311 | 1 | * @x86@ |
|
312 | 8 | Alexander Smorkalov | * @mips@ |
313 | 2 | Alexander Smorkalov | |
314 | 1 | h2. Android API levels |
|
315 | 1 | ||
316 | 1 | You may wish to build OpenCV and samples for different level of Android native API. |
|
317 | 2 | Alexander Smorkalov | |
318 | 2 | Alexander Smorkalov | Just change the cmake cache @ANDROID_NATIVE_API_LEVEL@ to appropriative value. |
319 | 2 | Alexander Smorkalov | |
320 | 2 | Alexander Smorkalov | The following levels are currently supported: |
321 | 2 | Alexander Smorkalov | |
322 | 8 | Alexander Smorkalov | |_. Platform Version |_. SDK API Level |_. NDK API Level|_. Version Code| |
323 | 10 | Alexander Smorkalov | |Android 4.2|=.17|/8=.14|"JELLY_BEAN_MR1":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#JELLY_BEAN_MR1| |
324 | 10 | Alexander Smorkalov | |Android 4.1.1|/2=.16|/2."JELLY_BEAN":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#JELLY_BEAN| |
325 | 8 | Alexander Smorkalov | |Android 4.1| |
326 | 8 | Alexander Smorkalov | |Android 4.0.4|/2=.15|/2."ICE_CREAM_SANDWICH_MR1":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#ICE_CREAM_SANDWICH_MR1| |
327 | 8 | Alexander Smorkalov | |Android 4.0.3| |
328 | 8 | Alexander Smorkalov | |Android 4.0.2|/3=.14|/3."ICE_CREAM_SANDWICH":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#ICE_CREAM_SANDWICH| |
329 | 3 | Alexander Smorkalov | |Android 4.0.1| |
330 | 3 | Alexander Smorkalov | |Android 4.0| |
331 | 8 | Alexander Smorkalov | |Android 3.2|=.13|/8=.9|"HONEYCOMB_MR2":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#HONEYCOMB_MR2| |
332 | 8 | Alexander Smorkalov | |Android 3.1.x|=.12|"HONEYCOMB_MR1":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#HONEYCOMB_MR1| |
333 | 8 | Alexander Smorkalov | |Android 3.0.x|=.11|"HONEYCOMB":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#HONEYCOMB| |
334 | 8 | Alexander Smorkalov | |Android 2.3.4|/2=.10|/2."GINGERBREAD_MR1":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#GINGERBREAD_MR1| |
335 | 3 | Alexander Smorkalov | |Android 2.3.3| |
336 | 8 | Alexander Smorkalov | |Android 2.3.2|/3=.9|/3."GINGERBREAD":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#GINGERBREAD| |
337 | 3 | Alexander Smorkalov | |Android 2.3.1| |
338 | 3 | Alexander Smorkalov | |Android 2.3| |
339 | 8 | Alexander Smorkalov | |Android 2.2.x|=.8|=.8|"FROYO":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#FROYO| |
340 | 8 | Alexander Smorkalov | |Android 2.1.x|=.7|/3=.5|"ECLAIR_MR1":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#ECLAIR_MR1| |
341 | 8 | Alexander Smorkalov | |Android 2.0.1|=.6|"ECLAIR_0_1":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#ECLAIR_0_1| |
342 | 8 | Alexander Smorkalov | |Android 2.0|=.5|"ECLAIR":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#ECLAIR| |
343 | 8 | Alexander Smorkalov | |Android 1.6|=.4|=.4|"DONUT":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#DONUT| |
344 | 8 | Alexander Smorkalov | |Android 1.5|=.3|=.3|"CUPCAKE":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#CUPCAKE| |
345 | 8 | Alexander Smorkalov | |Android 1.1|=.2|/2=.-|"BASE_1_1":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#BASE_1_1| |
346 | 8 | Alexander Smorkalov | |Android 1.0|=.1|"BASE":http://developer.android.com/reference/android/os/Build.VERSION_CODES.html#BASE| |