Android development is only supported on Linux.
Install [prerequisite software][webrtc-prerequisite-sw]
Create a working directory, enter it, and run:
$ fetch --nohooks webrtc_android $ gclient sync
This will fetch a regular WebRTC checkout with the Android-specific parts added. Notice that the Android specific parts like the Android SDK and NDK are quite large (~8 GB), so the total checkout size will be about 16 GB. The same checkout can be used for both Linux and Android development since you can generate your Ninja project files in different directories for each build config.
See Development for instructions on how to update the code, building etc.
Make sure your current working directory is src/ of your workspace. Then run:
$ gn gen out/Debug --args='target_os="android" target_cpu="arm"'
You can specify a directory of your own choice instead of out/Debug
, to enable managing multiple configurations in parallel.
target_cpu="arm64"
target_cpu="x86"
target_cpu="x64"
$ ninja -C out/Debug
In order to use the Android SDK and NDK that is bundled in third_party/android_tools
, run this to get it included in your PATH
(from src/
):
$ . build/android/envsetup.sh
Then you'll have adb
and all the other Android tools in your PATH
.
AppRTCMobile is an Android application using WebRTC Native APIs via JNI (JNI wrapper is documented here).
For instructions on how to build and run, see examples/androidapp/README.
Note: This is known to be broken at the moment. See bug: https://bugs.webrtc.org/9282
$ ninja -C out/Debug AppRTCMobile
$ build/android/gradle/generate_gradle.py --output-directory $PWD/out/Debug \ --target "//examples:AppRTCMobile" --use-gradle-process-resources \ --split-projects --canary
Import the project in Android Studio. (Do not just open it.) The project is located in out/Debug/gradle
. If asked which SDK to use, choose to use Android Studio's SDK. When asked whether to use the Gradle wrapper, press “OK”.
Ensure target webrtc > examples > AppRTCMobile
is selected and press Run. AppRTCMobile should now start on the device.
If you do any changes to the C++ code, you have to compile the project using ninja after the changes (see step 1).
Note: Only “arm” is supported as the target_cpu when using Android Studio. This still allows you to run the application on 64-bit ARM devices. x86-based devices are not supported right now.
To build APKs with the WebRTC native tests, follow these instructions.
Ensure you have an Android device set in Developer mode connected via USB.
Compile as described in the section above.
To see which tests are available: look in out/Debug/bin
.
Run a test on your device:
$ out/Debug/bin/run_modules_unittests
--gtest_filter flag
, e.g.$ out/Debug/bin/run_modules_unittests \ --gtest_filter=RtpRtcpAPITest.SSRC:RtpRtcpRtcpTest.*
If want to run Release builds instead; pass is_debug=false
to GN (and preferably generate the projects files into a directory like out/Release
). Then use the scripts generated in out/Release/bin
instead.
The instrumentation tests (like AppRTCMobileTest and libjingle_peerconnection_android_unittest) gets scripts generated in the same location as the native tests described in the previous section.