From 37740fa30e775daa921d94cec60cba57aea46724 Mon Sep 17 00:00:00 2001 From: Andrey Pavlenko Date: Tue, 14 Aug 2012 17:17:04 +0400 Subject: [PATCH] improving android tutorial v2 --- .../android_binary_package/O4A_SDK.rst | 80 ++++++++++++++----- .../android_binary_package/android_dev_intro.rst | 85 ++++++++++++++------- .../images/usb_device_connect_09.png | Bin 12276 -> 10239 bytes .../images/usb_device_connect_12.png | Bin 0 -> 8970 bytes .../images/usb_device_connect_13.png | Bin 0 -> 10276 bytes 5 files changed, 118 insertions(+), 47 deletions(-) create mode 100644 doc/tutorials/introduction/android_binary_package/images/usb_device_connect_12.png create mode 100644 doc/tutorials/introduction/android_binary_package/images/usb_device_connect_13.png diff --git a/doc/tutorials/introduction/android_binary_package/O4A_SDK.rst b/doc/tutorials/introduction/android_binary_package/O4A_SDK.rst index 3821e3f..1b440a0 100644 --- a/doc/tutorials/introduction/android_binary_package/O4A_SDK.rst +++ b/doc/tutorials/introduction/android_binary_package/O4A_SDK.rst @@ -7,7 +7,7 @@ OpenCV4Android SDK This tutorial was designed to help you with installation and configuration of OpenCV4Android SDK. -This guide was written with Windows 7 in mind, though it should work with any other OS supported by OpenCV4Android SDK. +This guide was written with MS Windows 7 in mind, though it should work with GNU Linux and Apple MacOS as well. This tutorial assumes you have the following installed and configured: @@ -27,44 +27,82 @@ If you encounter any error after thoroughly following these steps, feel free to General info ============ -**TODO:** rewrite this section. -OpenCV4Android SDK uses Android OpenCV Manager for library initialization. OpenCV Manager provides the following benefits: +OpenCV4Android SDK package contains the stuff that enables development Android applications with use of OpenCV library. -* Compact apk-size, since all applications use the same binaries from Manager and do not store native libs within themselves; +The package content look like the following: -* Hardware specific optimizations are automatically enabled on all supported platforms; +:: -* Regular updates and bug fixes; + OpenCV-2.4.2-android-sdk + |_ apk + | |_ OpenCV_2.4.2_binary_pack_XXX.apk + | |_ OpenCV_2.4.2_Manager.apk + | + |_ doc + |_ samples + |_ sdk + | |_ etc + | |_ java + | |_ native + | |_ 3rdparty + | |_ jni + | |_ libs + | |_ armeabi + | |_ armeabi-v7a + | |_ x86 + | + |_ license.txt + |_ README.android -* Trusted OpenCV library source. All packages with OpenCV are published on Google Play; +* :file:`sdk` folder contains OpenCV API and libraries for Android: - .. +* :file:`sdk/java` folder contains an Android library Eclipse project providing OpenCV Java API that can be imported into developer's workspace; +* :file:`sdk/native` folder contains OpenCV C++ headers (for JNI code) and native Android libraries (\*\.so and \*\.a) for ARM-v5, ARM-v7a and x86 architectures; -For additional information on OpenCV Manager see the: - -* |OpenCV4Android_Tutorial|_ +* :file:`sdk/etc` folder contains Haar and LBP cascades distributed with OpenCV. + +* :file:`apk` folder contains Android packages that should be installed on the target Android device to enable OpenCV library access via OpenCV Manager API (see details below). + + On production devices that have access to Google Play Market (and internet) these packages will be installed from Market on the first start of an application using OpenCV Manager API. + But dev kits without Market or internet require this packages to be installed manually. + (Install the `Manager.apk` and the corresponding `binary_pack.apk` depending on the device CPU, the Manager GUI provides this info). -* |OpenCV4Android_Reference|_ + **Note**: installation from internet is the preferable way since we may publish updated versions of this packages on the Market. - .. +* :file:`samples` folder contains sample applications projects and their prebuilt packages (APK). + Import them into Eclipse workspace (like described below) and browse the code to learn possible ways of OpenCV use on Android. + +* :file:`doc` folder contains various OpenCV documentation in PDF format. + It's also available online at http://docs.opencv.org. + + **Note**: the most recent docs (nightly build) are at http://docs.opencv.org/trunk/. + Generally it's more up-to-date, but can refer not-yet-released functionality. + +Starting version 2.4.2 `OpenCV4Android SDK` uses `OpenCV Manager` API for library initialization. `OpenCV Manager` is an Android service based solution providing the following benefits for OpenCV applications developers: +* Compact apk-size, since all applications use the same binaries from Manager and do not store native libs within themselves; -This package is quite close to the current OpenCV4Android distribution. If you're beginner with OpenCV, tutorial from above will help you to start. +* Hardware specific optimizations are automatically enabled on all supported platforms; -* Library Project for Java development with Eclipse. +* Automatic updates and bug fixes; -* C++ headers and libraries for native application development. +* Trusted OpenCV library source. All packages with OpenCV are published on Google Play; -* Java samples, javadoc documentation. + .. -* prebuilt binaries for ARM-v7a platform. + +For additional information on OpenCV Manager see the: + +* |OpenCV4Android_Slides|_ + +* |OpenCV4Android_Reference|_ .. -.. |OpenCV4Android_Tutorial| replace:: Tutorial -.. _OpenCV4Android_Tutorial: http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/android_binary_package.html#android-binary-package +.. |OpenCV4Android_Slides| replace:: Slides +.. _OpenCV4Android_Slides: https://docs.google.com/a/itseez.com/presentation/d/1EO_1kijgBg_BsjNp2ymk-aarg-0K279_1VZRcPplSuk/present#slide=id.p .. |OpenCV4Android_Reference| replace:: Reference Manual .. _OpenCV4Android_Reference: http://docs.opencv.org/android/refman.html @@ -255,4 +293,4 @@ Well, running samples from Eclipse is very simple: What's next =========== -Now, when you have your instance of OpenCV4Adroid SDK set up and configured, you may want to proceed to using OpenCV in your own application. You can learn how to do that in a separate *Development with OpenCV* tutorial. \ No newline at end of file +Now, when you have your instance of OpenCV4Adroid SDK set up and configured, you may want to proceed to using OpenCV in your own application. You can learn how to do that in a separate :ref:`dev_with_OCV_on_Android` tutorial. \ No newline at end of file diff --git a/doc/tutorials/introduction/android_binary_package/android_dev_intro.rst b/doc/tutorials/introduction/android_binary_package/android_dev_intro.rst index 86c93e0..166bf2d 100644 --- a/doc/tutorials/introduction/android_binary_package/android_dev_intro.rst +++ b/doc/tutorials/introduction/android_binary_package/android_dev_intro.rst @@ -13,15 +13,15 @@ If you encounter any error after thoroughly following these steps, feel free to Preface ======= -Android is a linux-based, open source mobile operating system developed by Open Handset Alliance and backed by Google. See the `official site `_ for general details. +Android is a Linux-based, open source mobile operating system developed by Open Handset Alliance led by Google. See the `official site `_ for general details. -Though being relatively easy to enter, Android development would require fair understanding of programming and its common concepts. Even basic familiarity with Java or C++ is advantageous. +Development for Android significantly differs from development for other platforms. +So before starting programming for Android we recommend you make sure that you are familiar with the following key topis: -For the quick start with Android development, you should get yourself accustomed with some fundamental Android aspects: - -#. Activity and its lifecycle. Information on this essential Android class is available on the `official site for Android developers `_ (see first two sections) or on the corresponding page of the `reference `_. -#. OpenCV development will certainly require some knowlege of the `Android camera `_ essentials. -#. Some basic understanding of `Java Native Interface `_ will help you to apprehend the concept of using native code in Java. +#. `Java `_ programming language that is the primary development technology for Android OS. Also you can find `Oracle docs on Java `_ useful. +#. `Java Native Interface (JNI) `_ that is a technology of running native code in Java virtual machine. Also you can find `Oracle docs on JNI `_ useful. +#. `Android Activity `_ and its lifecycle, that is an essential Android API class. +#. OpenCV development will certainly require some knowlege of the `Android Camera `_ specifics. Quick environment setup for Android development =============================================== @@ -284,58 +284,91 @@ AVD (*Android Virtual Device*) is not probably the most convenient way to test a Hardware Device --------------- -If you have an Android device, you can use it to test and debug your applications. This way is more authentic, though a little bit harder to set up. You need to make some actions for Windows and Linux operating systems to be able to work with Android devices. No actions are required for Mac OS. See detailed information on configuring hardware devices in subsections below. You may also consult the official `Android Developers site `_ for more information. +If you have an Android device, you can use it to test and debug your applications. This way is more authentic, though a little bit harder to set up. You need to make some actions for Windows and Linux operating systems to be able to work with Android devices. No actions are required for Mac OS. See detailed information on configuring hardware devices in subsections below. +You may also consult the official `Android Developers site `_ for more information. Windows host computer ^^^^^^^^^^^^^^^^^^^^^ -#. Enable USB debugging on the Android device (settings menu). +#. Enable USB debugging on the Android device (via :guilabel:`Settings` menu). #. Attach the Android device to your PC with a USB cable. #. Go to :guilabel:`Start Menu` and **right-click** on :guilabel:`Computer`. Select :guilabel:`Manage` in the context menu. You may be asked for Administrative permittions. #. Select :guilabel:`Device Manager` in the left pane and find an unknown device in the list. You may try unplugging it and then plugging back in order to check whether it's your exact equipment appearing in the list. .. image:: images/usb_device_connect_01.png :alt: Unknown device :align: center -#. Right-click on the unknoen device, select :guilabel:`Properties` then select the :guilabel:`Details` tab. Select :guilabel:`Hardware Ids` and copy the line like ``USB\VID_XXXX&PID_XXXX&MI_XX``. +#. Try your luck installing `Google USB drivers` without any modifications: **right-click** on the unknown device, select :guilabel:`Properties` menu item --> :guilabel:`Details` tab --> :guilabel:`Update Driver` button. + .. image:: images/usb_device_connect_05.png + :alt: Device properties + :align: center +#. Select :guilabel:`Browse computer for driver software`. + .. image:: images/usb_device_connect_06.png + :alt: Browse for driver + :align: center +#. Specify the path to :file:`/extras/google/usb_driver/` folder. + .. image:: images/usb_device_connect_07.png + :alt: Browse for driver + :align: center +#. If you get the prompt to install unverified drivers and report about success - you've finished with USB driver installation. + .. image:: images/usb_device_connect_08.png + :alt: Install prompt + :align: center + + ` ` + + .. image:: images/usb_device_connect_09.png + :alt: Installed OK + :align: center +#. Otherwise (getting the failure like shown below) follow the next steps. + .. image:: images/usb_device_connect_12.png + :alt: No driver + :align: center +#. Again **right-click** on the unknown device, select :guilabel:`Properties --> Details --> Hardware Ids` and copy the line like ``USB\VID_XXXX&PID_XXXX&MI_XX``. .. image:: images/usb_device_connect_02.png :alt: Device properties details :align: center #. Now open file :file:`/extras/google/usb_driver/android_winusb.inf`. Select either ``Google.NTx86`` or ``Google.NTamd64`` section depending on your host system architecture. .. image:: images/usb_device_connect_03.png - :alt: Device properties details + :alt: "android_winusb.inf" :align: center #. There should be a record like existing ones for your device and you need to add one manually. .. image:: images/usb_device_connect_04.png - :alt: Device properties details + :alt: "android_winusb.inf" :align: center -#. TBD. +#. Save the :file:`android_winusb.inf` file and try to install the USB driver again. .. image:: images/usb_device_connect_05.png - :alt: Device properties details + :alt: Device properties :align: center -#. TBD. + + ` ` + .. image:: images/usb_device_connect_06.png - :alt: Device properties details + :alt: Browse for driver :align: center -#. TBD. + + ` ` + .. image:: images/usb_device_connect_07.png - :alt: Device properties details + :alt: Browse for driver :align: center -#. TBD. +#. This time installation should go successfully. .. image:: images/usb_device_connect_08.png - :alt: Device properties details + :alt: Install prompt :align: center -#. TBD. + + ` ` + .. image:: images/usb_device_connect_09.png - :alt: Device properties details + :alt: Installed OK :align: center -#. TBD. +#. And "unknown" device becomes "known" one. .. image:: images/usb_device_connect_10.png - :alt: Device properties details + :alt: "Known" device :align: center -#. TBD. +#. Successful device USB connection can be verified in console via ``adb devices`` command. .. image:: images/usb_device_connect_11.png - :alt: Device properties details + :alt: "adb devices" :align: center #. Now, in Eclipse go :guilabel:`Run -> Run/Debug` to run your application in regular or debugging mode. :guilabel:`Device Chooser` will let you choose among the devices. diff --git a/doc/tutorials/introduction/android_binary_package/images/usb_device_connect_09.png b/doc/tutorials/introduction/android_binary_package/images/usb_device_connect_09.png index c8d30a0def211090076974f77615c007c3e8371e..679f6e939e33d5afcacc15ef5c419f47740bec77 100644 GIT binary patch literal 10239 zcmeHtXHZk!_ig|wQp7@05EPUq(xikUBB-F!yAYZRNDop&4Mjk~fQ2H2-g}1t3524c zKtQAkfdoWq2qg3X377Z&=Rf!N>CXLf=YF{FnmKc3KkKZ$&sp>AXZBfpzcVt>;b7%s z1pojXPaZ!s0RZU10013=h2az#_tbJaz0vua=x70|hpw)kHqN}#)Yk+6>XO)wpECjg z3;-iNvqz`+rArss)o)(8dsl+@x}vnaB2eY*HCq5(_*r2m)|+nU#68d7^13MXnp@WI zvU~u)5=1~HL|k4^Ox0Zo=zBx?wb0$L3tD1g_8M1p9%vZ&C^_n@yP2qmSl_>YU-zMo z!KoRWTUc5@^szR9fUIA*Iy<|(aQAuT4S@uO0GQ+G*iu-z5*RL~b6ri~5=;S{Ed;Q% z0xp#TcoA1`!mi%@%z3?-<9ajqje@Jvb%Jt;8@G~gXhew1Wh$s7$*ZP|0FeN`Ucl8c z0RJkT&~NVBoeUz247au}OV0~v?1`!mifBekJbEMfI8OTMTRHuNyARV9j1!eiKPa1j zx@(=HVf#f{t3*bt=Z2KkOCgeR|Z_1p@Kyozld8;re6%zVqA1y)%>s%=B-+}tyQ!y+6#nmu3F zI6xcSy%9eCxsR>-A6kuR+3#Arel>eF_2lIrQ`bM%-m5SCW}SkTokO?oN7_G(bF_Tp z28#DKC<+dbfckXmheXD{h-`9-X>p53c_ns&KXmzg{u=nDFYwFv;LLu{h!wAxL;u*7 zAlOcL?$8MU5L@h#F`$hpxQ!`P7%P?jRVqJOuXy-PE+Qf#I_7Q6yLebaTtY%Z9PDHK z$Fz@$@oCA485!ws5(*;UG{k=@OoNxCq_$+{#%Jf|XB9LSWTh46XVz8cl$Mp0ls8t_ zR#n&5*H%|FG*q>=Hpiu|zk}~ZMLZy)B^5q&qckLgc;?LE27-1`6_ zQMr6=O-%G9bv_nd2cb{ua%aik-<@r{dq(N(`3Ed;2Bb%Y_e9p{#!#~G6E5y(q3Vi} z@2c&i*pE(ABR6$VQt)9D?dIc2_SCkJwl;KNaB#45IJz8!KU&>vN0hg@6~Cir)GqEM z%VU&Sxh{XChjW8(MDt5#1TeCLb#}yMycfUUNID+TQ|V9RZQByIOgz^wXRNY4XrI*2 zU*JQR0%TmoXi{K}DDyN#(PDRtjoJa@4f7&AeJiIev?5m_guEAZ3&=FTF7jeq&<=MY?s;0_4fO z2OvkEzaC~vK~SWpX~c{`YKH-BPnIGufbTd6I^=tgcIti82PJ?a(bRCsvPr^|dJ(N^ zRa$ZIc&Qrq0hZg*YxdYPj1zhzkgx)-LrB0)X#tn~3vG{y6QJ+-WCZsic3H`P579a2 zLv>|_5`KWtG#*2Cr9M>Har!ITey5M5E7!BkT|_|0hXr81hCp`;AG!(Kb%5C~AvX7T zJ)>z0xQRgvVEK77u@!1b_$_Lgvw=`rB7Tb&;JyZi(?f5Bm?o*M7~c&K`NE#K3eJ%s zA!Jgnp#7JnC=@hEd8S+qH|9#jsHf&ot3s0VohKm~Q5BTe+uxqw%Rpckgp?Xnste-fP_fDq9|fHYz5VQ z{CzP@1(!Sf-HX_=jhF;shxuV>=j zD@zLelH&$7Ep=UqhaBag(5rz;bR|&1pu%7aRO>6E_g5?%xA&T+p^OR7s}3x&AW3vc z!8H}=(;NUIPl!TC4Z#YWhsDcm(?qsu-k-im&yOM7@STnG`TAEftC=-RpdIGw$qf>y z>AjRiqOiJ#`AOTs3xUdPnbwEs!q&1w&23Za0}Za%OXs7gaqF4&+K5cxEPb%Sfe@9|?b z*~$$vUk45Kp{fraQ3pwTKmL;D12myeYXvm%@haGyi*D0+cAr#4fr5t_J&xUD$4G_? zY{njNCUetJ-KX4s{IA3x79~!bPI$LLU9sSfKI(!Klfrlo-+Cr`t{-S#`+fTr zsC<}sioYY+(Pan33k6*xEg6rZT(_nj!LdMd;pl|D_EyR&#`ajB1D{U@p%|)9GpX)P zJ>(Az=Oacf9ALNRdj?=(0pS^2Jcn>{;~0K0S=0E{F-(+02z+=Dbw@!r^9}-qPS>up zy+zHPZ7)MeEa?T7>ki@Xg3C3Wj^G5tv(f~x^R&Yx&jCm_eBcOPJa{i%T9E{7z)s3p zDr*q`fXA}>d%+CpIpM7X2USS4KOZ{mj+I^b5=p*laarSp!rJ-*IzU=lF5yEY1J#2I z#0KC6`hmq((9s4n`OpSx*&bp&R1=xG`FNCOwghfOPr~r@xE+#yI(!MHI(&Q}wS%ar zjt|1#uML7GAWigbm%LN&b^OHOSz58(WPbPX3_*uy7oY@Xjj#`pBaQI_+S^`zI-PH{ zx65qK-44zi%^K!1KB)9_<415BCZNJOyj+xB!aewJv4?@c(61T+-+(rfbN(O&q-vi_ zMctZM=NxejK7og)4Dm*h`Kein9%ax9>G7SC>5P5wx+&J@3GP;rMUJjl+2TZw}2qlz5QbK@)uPDD$5j6{=@WVnWSpTh7;IwJS7i&T!LX1XeQ58B%wEyoqcU3TgINenHV zKLX)qrQZ*8z8lh6TLjNjge-Xu;Hv6{J(S16abUktp)DZoKwsdlIc+H^r@j}wN;mc~ z37q&HxHb4J=Sh1dr-O&s@sfq8sfb20qw7RQZ-2f?vZ2cj_~z;yd6`k2UekO}u#Ty=)f5h(k*}nUi6LXqpKwbvp%dUJeRxWGe~Mdnwp*Z=zv;*Dcb&_; z!B1fkbhplLHzyB{H_t*(s8~1OAG!E?hDrq#tO>}}lj)&JY+u-vjJDQTm=bn&^1<3*ye zD96Bpdx+Z0URU%TH1<9&E()TiI3Ke=zIa3y?D`c?kpFFcr$P)bzQo#hbB2_9duIRg zZZdNJ=0Md09)vo_;Xw8gk5+T)r$yqmqwjlffwLa3u|;U7X|phe!O&-7X_wYMvMuC& zbRV#h>fY6nB#hi@%(XEeoSrfHRpdWwhGT-Am5eTpUGQAUcC@T_nZYD~n|)I6KD=~u zT0{#aHG1Rj?{5oI3C<%*f9Dq!4P|h`xS#~-(vAfws$-3d2#7S_}+BPh&{u?_77({+I(7h z_XB=%$Ern^YLeZ{j1}tlBXeuhCQ*LER#jyBtwOAmB%xV&Mi_a;BKaA6JJEH#LAUby zBdX;TdCwPwm_#6~^)tkOX9>fy)CgEa_GR+KdOtioE`&@4cjag)MLWP3ev)BaGO~*p zh2m&g?6*f(ktuOq#!?LOYahONy{+)+(ssuCXCpG%J4ETKy39Eb!EH~qRdEJ4ackRE zVI1w24^t?G5eVk@Xiu3P1Pdnv%riFmX53Q}4H2E=;F7!)>++RmQM=BSH3l@rnb7x> zm+)L(jm}K@6h2j&e2Q%9S_QE$w0L4KC&lrtsjHgCEYkU9*wIj1_Lm6)+nS_tS~RxB zIZ#2P>I%+HJtzUx7gHkrVIHHHW$!ipUK7mS_-xF3gb98f+&C5gW{fE-@H`J%uk7sc z_$Q*u6N#-RSgfxXlFHg}+gUwh^i4{a{GhcCfR zJ z=L7wQL%T|sj`I`1g(qzrBWJp#WoD`KOzd5$>9^s$EicV3q5rxVECzC$_t!s5Y3k$U z`;j5#PjvU6mi%qg=!Jzf2G1&y*}StdpzMRC~g!{bH5WLIfbe-C=o7OU~A;{TF?;j zYoTLgWjBc=ZAVB&Rqj3eJapd5dZr`&T=6-dN6&b;t~2Hjt0Am)pLh<0?av~bQh(-! zu$*CJs=B`veC`OeGgUc}R|2Y{M%!IVWoEoX<6))8Mf9ELT7k6l4c?E-RpNO^xDgp? zd<%fnE>oItf+W-s67ad5AGm6d9w;rqm>IQmJDo{N^eJ_$B>)HmTY(t>1vBxiWJCS0 zC`Mdor#LqNTwumeSnI`RiT7AItO3q|d$h|5TV0^s&a6O#tg8jHa}r!FNHolXRtDmS zBxHoLE?$<}G8LCS_H2Bsf5gv+ibVX^iv&2^t{9fgZs@RGgD`*#Zk|I$0!d0{jI!bU z<)~TSbI@os?4kzAA_L(y8FlrmzwoT$>u8XW-_3&U!^6raInS% zZa6D<=WT8&@n>(4(m@)8f$G-bjFwtjcb2H$Z}F=rIY`2yKs~yO9ZbD&26s66L`QC! ztq#p?1JFP{(OlYixYxF|p+gHMPa!?iLqp__NP7Yke`Zp4sO_*Q><(k=d@yyk_4rdX zcDT^8ZqpxHGbpk(swPRvu*zcvZ!W@_X%hqZbxcTR#!@OvD}E4<5@TfgKy5(dHTw+^ z8buX`X;#m8n*_XUUq?`MjGKH90yz7n#o7cOPhvwNfo<6jBE@*xsq5`gsu4Woxphoa z4SF+{am30f6sUlS-fkS^pvDh2e90yWUL()K*x%I|#%(47w2>~aV!A?#TH8619O?pTrOE9d^_v$D;z3|vL~_r)8;59{L{SDoXjvBe6+D%^5IN-+YgMG zYGHS_GK?cg^7k=dwNfX5o`E(oiZ{vlwO>a>W#$xl93+k^R<|aZkLC3KSe4c2sHtN7 zienyFc#-FyfEna95!<`O83MhvTtI$-=|v9B%%}7gKQKXZxFXi1@bj+jYiX8muR;hI zY|9r&bI#fX*oiRsPGD&->XamU9rXiD;PH9SWE*yO+c^#tM?zKp;;DxT7h4Vpfqpk~ zmv>@|LwDh|-`zbW*PLf5Yp#aCf6|Hx*NHXaz7JJ33mVCB<^r5Plgv7InA*}I0s$E_ zX}4|}EA2k3WSbPbmf-v)<7ot<%yq5qw-HH+2P3PP0sxzij=ikQoAbP#@!ahe9j>^z ztnbBxF6=Xfo-s3el)k=c(znhpB2}e zf2Fwi;+&^jM(}MVE)?vMyq>;DCw5F>_nC({g#UjxupVx3w+HjNou_*C{Q<%S8-G$H zy-4Vpsjw++XVwv`8WRcjjA7M^w^*;9!-A;c)os?7O;PcBPHijWNVjp=c@hs;Aq{cv zymQKJ_5@{O?Tawt%DpSMJvt27SfaNjS27igBAgnXwwz}QzngTzEqGA=`*w6-CiT(Q z4EGuMz)(p!k_~^9@D=_n=c9C&V;mbhkNc5cn#+XqAwsJUKq-Hp6(;;D6uGby4_ZMsWBxPE=HzwD}I79}sp9FFdz$ zd)W9gtjQ+PKI)q+qd18b`*p~Y7}aBjOdPW_i8577oNx_lV3SMmWAEip;R`MnjM!q5X?A_M70biF)R^(Gx7+j2mUESm@a-k3M3$q=;3r+z78ofaj|{Hd$_RF~epA$219eG>M%ySE%xk3n?>c+_dL{#x1i!VFkJm3)fk+b?WeZbLC+3NcE%O@HegEZ? zwH)X?UhrfMxJSfJx;14~IpbFT@bu44-|iUl^7eFXN~c{MZbzs<+i@$!z>Ou~Z0gi- z)l?^Fvv@_IYnhldnSHqCI~+C}v`if`WzGrRdMB2Bu(yx|T~=dGC8*3jLrs-COS|Gi z82lbGsSLoWI$h?Q@@Kb=UE5h z*8Nwa`?;FyDKG5-el}*_KaNOS`|~f@+MAHsbDpQ-_;koFsU(tgXb01wR~w#MUJ8lty*YIB4^ z`47<$yynciBLW_p}O z6r#v5Ck(S%b2D1)_iz6k3CqP_iQp%yO-?9P} z+tlbjfPCI%Pp_w?jk!PkhagZXuJOJe9CvP%o77B?l2UBWAv14Uxksq&x7Da`tw2k+ zR(P$|cvMhR*o<^Lr7tpt>aKeeuHj#KsXg*VIziQ=N?{1(q@yS@ZCeooet7l>71~?tHk!b{d2{%pmR(OGdSHy^zKAy z;F&bUU(R93K62Rl=nlsWIBZEihf;Y9adJen4!7-b5h6_>_4`z!Fj%C4+EHbLoi>wB zXZt+Zzm>X&rntR4hl2U4CF#z#prnp}xxUJLJ*_*=vN2}azBJ7lPHH1m9}x)mNU(3m z8;GUT1>&L~yt2wlLLePQ%z;uQ4MHdb_QCN1E%u=&O=kD*JK1+_*pZq|V5+?Yr>$l) zC{Du6F1TO9jU{kR4SxcM<_~nl#Ek5eNQ#LZd!C<`4{{&7cKkJDSa~t%;jFdrMyBsj zP@fu(G6b~2jv?`aSZ;IIdTW>ZX6N(k$yQ8ph$5*3EbX;ntQ#5PmfPj@JPSPG(+h$Z&dQVjbP zGb(v9Dyy!XQFBV|`UA759kZEM)3C(Wz3iI_{S>-?_;R#fwh$ z++p+4W;;57S_k6{bJ=~}Cork(b*grAp5?zK8tRH5?n=BHRpV~gXr%SsKI&rJL?+4^ zbGD-N?vd$=;Xq@T!ea6tPuJ(+a;N(hO_<4R@XW@gHZ-BuEH}f;e>R=_iQdMFQ2v+=w7A>Vi5HI&8at+@l_dAN2^ogU#84f}?Le z+!}wRZ4v2nO8>p`b16*TFyuxXVFS5aFg3%9yZpbpcmsTVma&C30$BaxZJIa$cXLfBtpWg9xD^X|M?a^ZFX+?y zuk+s|{L6%Yr^COR@c%>@BbGhoPtQ9<(qk}v!wOg%y$hU-PfyEKPg&y{O;{rkCiOyP zh4gb(h2D=PivSQw5&lpAM{c04t9<@N7e-t$TjnQ_+NiYs3X6qxC+G*ym+Hp!t-ib5 z&*wbbyf1*IAeVICGRkuOL}8K-qtJ4G+NH+#$vgoG?6#f!4{pCHMsd51uytPv>*enS z1Kt(g|A;QLy&3jJ5b{z2<}jJ#oGe?-2xYkb!07rWm`C9-&tvEwJneNPnj=qLH0&dV zDwGZ6fRk0W@7%hK)>q|wFx4SVa}H_{Oam$(V2!LD>v^X~@n&(>3SXkp`bw7{Ot(c* z%HT2w24kdD{?0CZ?3n0h)bIQSD=+BV?3-skGrh-)roS2S;7^o!ul=g>o4Ao|xcsZH zyBAp&5O%EdCycC}_=s=f+?^Dme=2p|6tIIsGV5UDfc@RG%W?1Pi$q`A%J;Fc4(VjD zvuL+)=O?|2L|ka*vf!487=A_f_P>jS|5@&%|DSzCAdJgl{*gdg*{6)1Sn=`Rwod-b zmy77*5nFLDKAvU#!g^Ikl}l1NK4EOtZ0>~ajz|15CT-#AKL?kdJTiD#t>qB)KL88? B5qkgt literal 12276 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 diff --git a/doc/tutorials/introduction/android_binary_package/images/usb_device_connect_12.png b/doc/tutorials/introduction/android_binary_package/images/usb_device_connect_12.png new file mode 100644 index 0000000000000000000000000000000000000000..689c1bbf1cde7cec0f5c0b5f5299fd7da012447f GIT binary patch literal 8970 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 XF-raXVe-FD@6}bco|irQ;QxOBwQgXq literal 0 HcmV?d00001 diff --git a/doc/tutorials/introduction/android_binary_package/images/usb_device_connect_13.png b/doc/tutorials/introduction/android_binary_package/images/usb_device_connect_13.png new file mode 100644 index 0000000000000000000000000000000000000000..4d7c84fbc70360bbc93ad5d4118ad93243622b9c GIT binary patch literal 10276 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 z z=CBPpFj;!9+Q8|8u;O2~EKteTy1>C{Uf^>~R}O)WZsdD42Z?rT2VIQf{OdQa-zXb} zSM3+-Ge{pHIKTXqw(HX}xssSU1s#H=0!*05ObbaL#cnagG!xGV`u4%w^JyE0o{KCm z#>jVBcpvhdeQ59lS~-iS#m8>w!N0k!A?|;${356N;NF8;T3T$O;aePL5R4(7E9%R2 z{)c$;9`vT-#B5T;wu2*`twV93M3Vscr7`X9z0{Y>qrKThAL=H*lu<()Gx{MK%=RPf zf@JV(r6tADx3p#}%7l-riqVWRaXm;wM zED#8Wk+{bcon#o6&)+xL^++{^v8BftgsHrlzOn%zT#mu6BWSNvy*FEr_n_Lt{$FdR zU;pq4l7`Uq^C5(5r`b3aD+@ggNcOhr*h-%3h-^ReY$;MgmV~|c(F;~~l?YH&OzJ(1 zkyo8$W@KG$49R*hnZO=3Y38nwMZH@69R^HN?(OQHn-R|;^z2j7C@Wx8?r!H9`zD_d zW{x%2XY8H%nGA29b{6O7&Sc>7=JJoIGc`Rf(;^Dr1}DzvBE^Nr(rI|^fiTl!>ox?V z>Eg_Yzbpmx=(uoPXir3ZcMK~5!z(vfP_T_W@CumyG?(cEJzS0K&%H@XU|7;y)u$A| zP1eiV^&K{p3^Kg7+7F=CSB)G0_nT?NF`s)hjEZ(7j99? z2uUKL*Sfa{N1{LzYf>d;^JIY$)Co8-cj{|hwt&}v?1kc6HulOqj5-DDk+#|;h{BB7 z7*oy#zgMfw{9chg)MZ<&k&arJxiRDowT5(tzF=F~1AOMtihe#~%r=bbp4WE#Dd@p^ zK4Iet4@qjb@4~*B(BItGRi3&I83%kBu466t%+LR(3K{Vz|NISQlA)BG-hvj&nx&+( zQ%CD9SY36n@Jm_zT=Z4$4YT6-*aeaE`Q|gA)%NB{IDK1U6rpc|nX;9Z22$mNfXUXL z5+1r#QTuqO(U)(yWy^H3JqkD=#Dh%cZXtF9$Z~YK85k6^N&Z_Z!s+;nn4AS{WreWK zjtDG~xTc~{q=85|Q=D@QsGjECgsP9i9rLxZJZW?bQyTiDHk5FwfW2BpO?DAp_TEis(52F}0$ z!J>ap#l!II&r9;5h^;|N_%!BiA_mQbbbkCSeQj_q2F65Bd5ET+p@9(cC=#S2jkwd1 zbYobrk1r4_CvDq|cVCiQEGMDht~%2r^K+9#Smym^GI7Sp#qX&ak8wU>yU#f@aqj{+ z>Cs+mrM>zP^OiekSG{fiZ06_`U^_|5mkeMd)QKjOExg!)b^8%QZWQnlM$bhd)a-M& zO!7XG8O^(9r_sa~ECOOodQ5A+qeb#9fV9@pm}P-Rc*tP&~DH z^PRX-RybO6pWQW%sXBXI%3dz+*I!j9+m-t+dfUqi0PrcpSL9OU3KcNS=)EMzL#axp zguHL`ltq004YPFXghni$l-hy|Z;4yrTkovKN*$A$3m);nqW%nQKLRf^egEj2_EBn4 zTxyp=9cNPDa{2G{RhSY1hyw8d{I1HGK9Jn)`9c_B)`$Alp43C;?WC9b-@+0tRdjVU z*2j@4>6~NScQbdOZ)>gquzC(>^6}s&HSV@jBWPYxKah$QmkNCFMASodGQ%cRl$GRD z%5CZ*y=RY+=tGjwHR{w6V&naZK5K>6wkx;_PkoGUUIar%FTas+J$J+8VPQ^YOh7Y**N!Q;PSsBOsgaRqEp-82=ee)PVzZMo^>91z~pd?CgI?P`B zf)gvnSJN3c@l^X^fOO(>Od4i@>(AE~+1buRxa1(4x3&Zk>@ea7Ml|!|VN*6;=Agw( zy3@QV=lH{+8iz(dmz$T;;1~hRQwk4`+MtZ-RX*^qYFgJ3ujC|+oCBa5%NIFvbh#Rf zOZm8cCDFZ@fn)Y26+*r548l*kI{>@s(eml==>LmKCS%gA?hGFmQ-A5owfF?Mi{`b&QeDJ@!vao&1*QHMl< z%fugTBu@YX$l}*(A(}>K7!Q3-H2h)-yYoPR3*n)Zem~4Y7jp-#StPC^W<1e(M4>6C zD#sJgLpcLa#0|wWQ{)HMPlF*x-$-oJxmObe|BB&c^=#r?07j{iq_zfBGA{7R5N z8oftZYWwI^h6lL0mpXhZ3kx8~=}-(2?MNm=;~UDpjJYl>GJ|!}a~e@2$4gPTty$OV zl+9_92hWfdUlmZV|Q3h1$vA^zRb&(m=eI zIqwZ`L5uz82#KRfF^kB*XP@e4?d2$`ml{!^6Cy=tcQPd=67exw9ru!YWdg>(ZA{Hf z+71YPFcJ4TL(`!FMw18_A}*JdL!vr)mefD2VhNz3|I5eN#ILc9j*t#tB?{olNyG$O z00>F)0C*%IB=I-&bUw}Foe%|55Ipkn;5+l19&gZ%uw`zP`Q(ogt@T(rU=eCaS5Z^$ zwtM0}r@?E(WtY3G*kkVeuP=!jMINGR1w7$~#D{*yuIi`rqHPh2%;>hhS)?nuMYd_m z!Dr*z9oujeJm^uKQ(8y2ABDx@m()K!Q7e=a9Ow^aqth;Rl2Va~bJDJE)3i@KPs5%q zeIg2(vFP1