Unable to build WebRTC with custom Android SDK

429 views
Skip to first unread message

Raman Budny

unread,
Aug 4, 2017, 8:51:49 AM8/4/17
to discuss-webrtc
I'm trying to build WebRTC M61 for Android using SDK, placed in custom location, defined by ANDROID_SDK_ROOT and ANDROID_NDK_ROOT variables:
BUILD_DIR="android_arm/Release"
GN_ARGS="target_os=\"android\""
GN_ARGS+=" android_ndk_root=\"${ANDROID_NDK_ROOT}\" android_ndk_major_version=15 android_ndk_version=\"r15b\""
GN_ARGS+=" android_sdk_root=\"${ANDROID_SDK_ROOT}\" android_sdk_version=\"25\" android_sdk_build_tools_version=\"25.0.2\""
GN_ARGS+=" android_sdk_tools_version_suffix=\"-26.0.2\""
GN_ARGS+=" android_support_library_version=\"25.3.0\""

gn gen
"${BUILD_DIR}" --args="${GN_ARGS}"
ninja
-C "${BUILD_DIR}"

The compilation fails with the following error message:
ninja: error: '${ANDROID_SDK_ROOT}/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java', needed by 'obj/third_party/android_tools/android_support_chromium_java__compile_java__javac.inputdeps.stamp', missing and no known rule to make it

That's because it fails to locate a PackageManagerWrapper, which is not included into android/google support repository.
So I copy it to my SDK installation:
cp ${WEBRTC_DIR}/src/third_party/android_tools/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java ${ANDROID_SDK_ROOT}/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java
and try to compile it again. Here is what I get this time:
python ../../build/android/gyp/javac.py --depfile=gen/third_party/android_tools/android_support_chromium_java__compile_java__javac.d --jar-path=gen/third_party/android_tools/android_support_chromium_java__compile_java.javac.jar --java-srcjars=\[\] --java-srcjars=@FileArg\(gen/third_party/android_tools/android_support_chromium_java.build_config:javac:srcjars\) --classpath=@FileArg\(gen/third_party/android_tools/android_support_chromium_java.build_config:javac:interface_classpath\) --bootclasspath=lib.java/android.interface.jar --java-version=1.7 --chromium-code=1 @gen/third_party/android_tools/android_support_chromium_java.sources
...
util
.build_utils.CalledProcessError: Command failed: ( cd ${WEBRTC_DIR}/src/android_arm/Release; /usr/bin/javac -g -encoding UTF-8 -classpath : -sourcepath : -bootclasspath lib.java/android.interface.jar -source 1.7 -target 1.7 -Xlint:unchecked -Xlint:deprecation -d /tmp/tmpWN2Ukj/classes ../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java )
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:12: error: cannot find symbol
import android.content.pm.ChangedPackages;
                        ^
 symbol:   class ChangedPackages
 location: package android.content.pm
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:23: error: cannot find symbol
import android.content.pm.SharedLibraryInfo;
                        ^
 symbol:   class SharedLibraryInfo
 location: package android.content.pm
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:24: error: cannot find symbol
import android.content.pm.VersionedPackage;
                        ^
 symbol:   class VersionedPackage
 location: package android.content.pm
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:490: error: cannot find symbol
   public ChangedPackages getChangedPackages(int sequenceNumber) {
          ^
 symbol:   class ChangedPackages
 location: class PackageManagerWrapper
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:505: error: cannot find symbol
   public PackageInfo getPackageInfo(VersionedPackage versionedPackage, int flags)
                                     ^
 symbol:   class VersionedPackage
 location: class PackageManagerWrapper
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:511: error: cannot find symbol
   public List<SharedLibraryInfo> getSharedLibraries(int flags) {
               ^
 symbol:   class SharedLibraryInfo
 location: class PackageManagerWrapper
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:86: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:88: error: cannot find symbol
       mWrapped.clearInstantAppCookie();
               ^
 symbol:   method clearInstantAppCookie()
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:484: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:486: error: cannot find symbol
       return mWrapped.canRequestPackageInstalls();
                      ^
 symbol:   method canRequestPackageInstalls()
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:489: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:491: error: cannot find symbol
       return mWrapped.getChangedPackages(sequenceNumber);
                      ^
 symbol:   method getChangedPackages(int)
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:494: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:496: error: cannot find symbol
       return mWrapped.getInstantAppCookie();
                      ^
 symbol:   method getInstantAppCookie()
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:499: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:501: error: cannot find symbol
       return mWrapped.getInstantAppCookieMaxBytes();
                      ^
 symbol:   method getInstantAppCookieMaxBytes()
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:510: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:512: error: cannot find symbol
       return mWrapped.getSharedLibraries(flags);
                      ^
 symbol:   method getSharedLibraries(int)
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:515: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:517: error: cannot find symbol
       return mWrapped.isInstantApp();
                      ^
 symbol:   method isInstantApp()
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:520: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:522: error: cannot find symbol
       return mWrapped.isInstantApp(packageName);
                      ^
 symbol:   method isInstantApp(String)
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:525: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:527: error: cannot find symbol
       mWrapped.setApplicationCategoryHint(packageName, categoryHint);
               ^
 symbol:   method setApplicationCategoryHint(String,int)
 location: variable mWrapped of type PackageManager
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:530: error: method does not override or implement a method from a supertype
   @Override
   ^
../../../../../../android/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java:532: error: cannot find symbol
       mWrapped.updateInstantAppCookie(cookie);
               ^
 symbol:   method updateInstantAppCookie(byte[])
 location: variable mWrapped of type PackageManager
26 errors

[56/2595] CC obj/third_party/boringssl/boringssl/bcm.o
ninja: build stopped: subcommand failed.

Looks like it fails to import necessary classes of Android SDK: ChangedPackages, SharedLibraryInfo, etc.
Additionally, it turned that
gen/third_party/android_tools/android_support_chromium_java__compile_java__javac.d
gen/third_party/android_tools/android_support_chromium_java__compile_java.javac.jar
gen/third_party/android_tools/android_support_chromium_java.build_config
gen/third_party/android_tools/android_support_chromium_java.build_config
gen/third_party/android_tools/android_support_chromium_java.sources
are absent in build directory.

Could you please fix this functionality or suggest me right configuration options to build the library using custom SDK?

Henrik Kjellander

unread,
Aug 25, 2017, 2:48:52 PM8/25/17
to discuss-webrtc
We use the Chromium Android Test framework for our tests, so you most likely need an SDK that is very close to their, which contains a variety of extras.
What's wrong with using the bundled SDK instead of your own?

--

---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrtc+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/discuss-webrtc/d3a20dfc-8d95-4dac-a064-f47602e39ede%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raman Budny

unread,
Aug 28, 2017, 6:47:02 AM8/28/17
to discuss-webrtc
It consumes too much space on our CI server. We managed to use a shared NDK, but faced issues with SDK... 
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.

Henrik Kjellander

unread,
Aug 30, 2017, 2:09:48 AM8/30/17
to discuss-webrtc
What about if you make sure you download the DEPS-pinned revision of third_party/android_tools from https://chromium.googlesource.com/android_tools/ and put that into your shared location? Then you could essentially mount/symlink the expected location to your shared location. Then gclient sync will be perfectly happy and think it's the one it's supposed to download (it will even update it in future builds, assuming it has write access).

Doing this on all platforms can be challenging though, since NFS or similar is easy for Mac but Windows might be trickier.

To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrtc+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/discuss-webrtc/292bf086-5883-42b8-8379-f7e9847c4659%40googlegroups.com.

Raman Budny

unread,
Sep 1, 2017, 6:06:34 AM9/1/17
to discuss-webrtc
I've tested your proposal and hit another issue:
[70/963] ACTION //third_party/android_tools:android_support_chromium_java__lint(//build/toolchain/android:android_clang_arm)
FAILED: gen/third_party/android_tools/android_support_chromium_java__lint/result.xml gen/third_party/android_tools/android_support_chromium_java__lint/config.xml 
python ../../build/android/gyp/lint.py --lint-path=../../../../../../../../../android/webrtc/sdk/tools-lint/bin/lint --cache-dir android_lint_cache --platform-xml-path ../../../../../../../../../android/webrtc/sdk/platform-tools/api/api-versions.xml --android-sdk-version=25 --depfile gen/third_party/android_tools/android_support_chromium_java__lint.d --config-path ../../tools_webrtc/android/suppressions.xml --manifest-path ../../build/android/AndroidManifest.xml --product-dir=. --processed-config-path gen/third_party/android_tools/android_support_chromium_java__lint/config.xml --result-path gen/third_party/android_tools/android_support_chromium_java__lint/result.xml --java-sources-file=gen/third_party/android_tools/android_support_chromium_java.sources --jar-path gen/third_party/android_tools/android_support_chromium_java__compile_java.javac.jar --classpath=@FileArg\(gen/third_party/android_tools/android_support_chromium_java.build_config:javac:interface_classpath\) --resource-sources=@FileArg\(gen/third_party/android_tools/android_support_chromium_java.build_config:deps_info:owned_resources_dirs\) --resource-sources=@FileArg\(gen/third_party/android_tools/android_support_chromium_java.build_config:deps_info:owned_resources_zips\) --srcjars=@FileArg\(gen/third_party/android_tools/android_support_chromium_java.build_config:gradle:bundled_srcjars\) --can-fail-build
Traceback (most recent call last):
  File "../../build/android/gyp/lint.py", line 385, in <module>
    sys.exit(main())
  File "../../build/android/gyp/lint.py", line 381, in main
    depfile_deps=classpath)
  File "/home/budnyjj/.../WebRTC/src/build/android/gyp/util/build_utils.py", line 592, in CallAndWriteDepfileIfStale
    pass_changes=True)
  File "/home/budnyjj/.../WebRTC/src/build/android/gyp/util/md5_check.py", line 87, in CallAndRecordIfStale
    function(*args)
  File "/home/budnyjj/.../WebRTC/src/build/android/gyp/util/build_utils.py", line 575, in on_stale_md5
    function(*args)
  File "../../build/android/gyp/lint.py", line 376, in <lambda>
    silent=args.silent),
  File "../../build/android/gyp/lint.py", line 151, in _OnStaleMd5
    os.symlink(os.path.abspath(src), PathInDir(src_dir, src))
OSError: [Errno 17] File exists
[79/963] CXX clang_x64/obj/third_party/protobuf/protoc_lib/cpp_message.o
ninja: build stopped: subcommand failed.

It turns that this command tries to make a symlink to the existing file. See build/android/gyp/lint.py:151
print("{} -> {}".format(os.path.abspath(src), PathInDir(src_dir, src))) # my addition
os.symlink(os.path.abspath(src), PathInDir(src_dir, src))

Output:
/home/budnyjj/android/webrtc/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java -> /home/budnyjj/android/webrtc/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java

Henrik Kjellander

unread,
Sep 1, 2017, 10:44:45 AM9/1/17
to discuss-webrtc
I'm sorry my idea didn't work. I'm afraid I don't have time to dig deeper into this unsupported way of building.
Is there no way you can just get more disk on the machines for your CI then?

To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrtc+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/discuss-webrtc/562cf605-f0e9-4fe8-82f9-0fc1235cb072%40googlegroups.com.

Raman Budny

unread,
Sep 1, 2017, 4:43:30 PM9/1/17
to discuss...@googlegroups.com
Yes, will do so.
It's a bit confusing that WebRTC provides customization options to use own SDK but in fact doesn't support them properly... 

--

---
You received this message because you are subscribed to a topic in the Google Groups "discuss-webrtc" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/discuss-webrtc/yM8i7JuUkus/unsubscribe.
To unsubscribe from this group and all its topics, send an email to discuss-webrtc+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/discuss-webrtc/CAEtuHR2uqb6eUxu96H0Hy6nbeTAR_9-qP2O%2Bg_UmSuT2y_ASXQ%40mail.gmail.com.
Reply all
Reply to author
Forward
0 new messages