OpenCV  4.9.0
Open Source Computer Vision
Introduction into Android Development

Prev Tutorial: Introduction to OpenCV Development with Clojure

Next Tutorial: Android Development with OpenCV

Original author Rostislav Vasilikhin
Compatibility OpenCV >= 4.0

This guide was designed to help you in learning Android development basics and setting up your working environment quickly. It was tested with Ubuntu 22.04 and Windows 10.

If you encounter any error after thoroughly following these steps, feel free to contact us via OpenCV Forum. We'll do our best to help you out.

Preface

Android is a Linux-based, open source mobile operating system developed by Open Handset Alliance led by Google. See the Android home site for general details.

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 topics:

  1. Java programming language that is the primary development technology for Android OS. Also, you can find Oracle docs on Java useful.
  2. 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.
  3. Android Activity and its life-cycle, that is an essential Android API class.
  4. OpenCV development will certainly require some knowledge of the Android Camera specifics.

Manual environment setup for Android development

In this tutorial we're gonna use an official Android Studio IDE and a set of other freely available tools.

Get tools and dependencies

Here's how to get a ready to work environment:

  1. Download and install Android Studio:
    • Ubuntu:
      1. Download Android Studio: https://developer.android.com/studio
      2. Extract the tar.gz archive
      3. Follow the instructions in Install-Linux-tar.txt: open android-studio/bin folder in terminal and run ./studio.sh
      4. Perform standard installation through GUI
      5. Optionally you can add a shortcut on a desktop for a quick access by clicking menu Tools -> Create desktop entry. The menu appears after any project is created or opened.
    • Windows: Just download Android Studio from the official site and run installer.
  2. Install fresh Android SDK and NDK:
    1. Open SDK manager in Android Studio (Customize -> All Settings -> Languages & Frameworks -> Android SDK)
    2. Enable "Show Package Details" checkbox
      sdk_ndk_manager.png
    3. Check SDK and NDK of the latest versions and press OK
    4. Make sure that your device support the chosen SDK versions
  3. Install all the necessary packages for the build:
    • sudo apt install git cmake ninja-build openjdk-17-jdk openjdk-17-jre
    • the rest required packages are dependencies and should be installed automatically

Check OpenCV examples

  1. Download OpenCV from Android SDK from official release page on Github or SourceForge.
  2. Extract zip archive with your OS tools.
  3. Open the project <YOUR_OPENCV_BUILD_FOLDER>/OpenCV-android-sdk/samples in Android Studio.
  4. Connect your device
    • Debugging should be enabled on a device, you can find an instruction about it across the web
    • Alternatively you can use a virtual device that comes with the Android studio
      choose_device.png
  5. Choose a sample from the drop-down menu (for example, 15-puzzle) and run it.

Setup Device for Testing and Debugging

Usually the recipe above works as expected, but in some cases there are additional actions that must be performed. In this section we'll cover some cases.

Windows host computer

If you have Windows 10 or higher then you don't have to do additional actions to connect a phone and run samples on it. However, earlier Windows versions require a longer procedure:

  1. Enable USB debugging on the Android device (via Settings menu).
  2. Attach the Android device to your PC with a USB cable.
  3. Go to Start Menu and right-click on Computer. Select Manage in the context menu. You may be asked for Administrative permissions.
  4. Select 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 appears in the list.

    usb_device_connect_01.png
  5. Try your luck installing Google USB drivers without any modifications: right-click on the unknown device, select Properties menu item –> Details tab –> Update Driver button.

    usb_device_connect_05.png
  6. Select Browse computer for driver software.

    usb_device_connect_06.png
  7. Specify the path to <Android SDK folder>/extras/google/usb_driver/ folder.

    usb_device_connect_07.png
  8. If you get the prompt to install unverified drivers and report about success - you've finished with USB driver installation.

    usb_device_connect_08.png
    usb_device_connect_09.png
  9. Otherwise (getting the failure like shown below) follow the next steps.

    usb_device_connect_12.png
  10. Again right-click on the unknown device, select Properties –> Details –> Hardware Ids and copy the line like USB\VID_XXXX&PID_XXXX&MI_XX.

    usb_device_connect_02.png
  11. Now open file <Android SDK folder>/extras/google/usb_driver/android_winusb.inf. Select either Google.NTx86 or Google.NTamd64 section depending on your host system architecture.

    usb_device_connect_03.png
  12. There should be a record like existing ones for your device and you need to add one manually.

    usb_device_connect_04.png
  13. Save the android_winusb.inf file and try to install the USB driver again.

    usb_device_connect_05.png
    usb_device_connect_06.png
    usb_device_connect_07.png
  14. This time installation should go successfully.

    usb_device_connect_08.png
    usb_device_connect_09.png
  15. And an unknown device is now recognized as an Android phone.

    usb_device_connect_10.png
  16. Successful device USB connection can be verified in console via adb devices command.

    usb_device_connect_11.png
  17. Now, in Eclipse go Run -> Run/Debug to run your application in regular or debugging mode. Device Chooser will let you choose among the devices.

Linux host computer

While the latest Ubuntu versions work well with connected Android devices, there can be issues on older versions. However, most of them can be fixed easily. You have to create a new **/etc/udev/rules.d/51-android.rules** configuration file that contains information about your Android device. You may find some Vendor ID's here or execute lsusb command to view VendorID of plugged Android device. Here is an example of such file for LG device:

SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666", GROUP="plugdev"

Then restart your adb server (even better to restart the system), plug in your Android device and execute adb devices command. You will see the list of attached devices:

savuor@rostislav-laptop:~/Android/Sdk/platform-tools$ ./adb devices
List of devices attached
R58MB40Q3VP device
savuor@rostislav-laptop:~/Android/Sdk/platform-tools$

Mac OS host computer

No actions are required, just connect your device via USB and run adb devices to check connection.

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 Android Development with OpenCV tutorial.