androidchromiumgn

how to add new dependency for android to chromium?


I want to build Chromium for android and I want to add new dependency Amplitude to Chromium. so I changed third_party/android_deps/build.gradle file to this:

dependencies {
    ...
    compile 'com.amplitude:android-sdk:2.23.2'
    ...
}

After that from third_party/android_deps/README.md I ran this command to fetch dependencies.

python third_party/android_deps/fetch_all.py --build-dir out/Default --android-deps-dir third_party/android_deps/ --ignore-vulnerabilities --ignore-licenses

After running the command this directories were added to third_party directory.

third_party/android_deps/libs/com_amplitude_android_sdk/
third_party/android_deps/libs/com_squareup_okhttp3_okhttp/
third_party/android_deps/libs/com_squareup_okio_okio/

and these lines were added to third_party/android_deps/BUILD.gn:

# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
java_prebuilt("com_amplitude_android_sdk_java") {
  jar_path = "libs/com_amplitude_android_sdk/android-sdk-2.23.2.jar"
  output_name = "com_amplitude_android_sdk"
  supports_android = true
  deps = [ ":com_squareup_okhttp3_okhttp_java" ]
}

# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
java_prebuilt("com_squareup_okhttp3_okhttp_java") {
  jar_path = "libs/com_squareup_okhttp3_okhttp/okhttp-3.10.0.jar"
  output_name = "com_squareup_okhttp3_okhttp"
  supports_android = true

  # To remove visibility constraint, add this dependency to
  # //third_party/android_deps/build.gradle.
  visibility = [
    ":*",
    "//third_party/androidx:*",
  ]
  deps = [ ":com_squareup_okio_okio_java" ]
}

# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
java_prebuilt("com_squareup_okio_okio_java") {
  jar_path = "libs/com_squareup_okio_okio/okio-1.14.0.jar"
  output_name = "com_squareup_okio_okio"
  supports_android = true

  # To remove visibility constraint, add this dependency to
  # //third_party/android_deps/build.gradle.
  visibility = [
    ":*",
    "//third_party/androidx:*",
  ]
}

Also these lines were added to third_party/android_deps/additional_readme_paths.json

[
    ...
    "libs/com_amplitude_android_sdk",
    ...
    "libs/com_squareup_okhttp3_okhttp",
    "libs/com_squareup_okio_okio",
    ...
]

but I can not import com.amplitude.api.Amplitude. I added this line to chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java:

import com.amplitude.api.Amplitude;

I got this error:

FAILED: obj/chrome/android/chrome_java.javac.jar obj/chrome/android/chrome_java.javac.jar.info
python3 ../../build/android/gyp/compile_java.py --depfile=gen/chrome/android/chrome_java__compile_java.d --generated-dir=gen/chrome/android/chrome_java/generated_java --jar-path=obj/chrome/android/chrome_java.javac.jar --java-srcjars=\[\"gen/chrome/android/autofill_verification_status_generated_enum.srcjar\",\ \"gen/chrome/android/chrome_android_java_enums_srcjar.srcjar\",\ \"gen/chrome/android/chrome_android_java_google_api_keys_srcjar.srcjar\",\ \"gen/chrome/android/chrome_strict_mode_switch.srcjar\",\ \"gen/chrome/android/resource_id_javagen.srcjar\",\ \"gen/chrome/android/sync_user_settings_enums_java.srcjar\",\ \"gen/chrome/android/vr_build_config.srcjar\",\ \"gen/chrome/assist_ranker_prediction_enum_javagen.srcjar\",\ \"gen/chrome/instant_apps_reasons_enum_javagen.srcjar\",\ \"gen/chrome/offline_pages_enum_javagen.srcjar\",\ \"gen/chrome/partner_bookmarks_javagen.srcjar\",\ \"gen/chrome/quick_action_category_enum_javagen.srcjar\",\ \"gen/chrome/supervised_user_url_filter_enum_javagen.srcjar\",\ \"gen/chrome/browser/screenshot_mode_enum.srcjar\",\ \"gen/chrome/browser/sharing_dialog_type_generated_enum.srcjar\",\ \"gen/chrome/browser/sharing_send_message_result_generated_enum.srcjar\",\ \"gen/chrome/browser/survey_http_client_type_enum.srcjar\",\ \"gen/chrome/browser/notifications/scheduler/public/jni_enums.srcjar\",\ \"gen/chrome/browser/supervised_user/supervised_user_error_page/enums_srcjar.srcjar\",\ \"gen/components/autofill_assistant/browser/autofill_assistant_enums_java.srcjar\",\ \"gen/components/autofill_assistant/browser/autofill_assistant_intent_strings_java.srcjar\",\ \"gen/components/browsing_data/core/browsing_data_utils_java.srcjar\",\ \"gen/components/browsing_data/core/clear_browsing_data_tab_java.srcjar\",\ \"gen/components/data_reduction_proxy/core/browser/data_reduction_proxy_savings_cleared_enum_java.srcjar\",\ \"gen/components/dom_distiller/core/distiller_type_java.srcjar\",\ \"gen/components/ntp_tiles/ntp_tiles_enums_java.srcjar\",\ \"gen/components/offline_pages/core/offline_page_model_enums_java.srcjar\",\ \"gen/net/effective_connection_type_java.srcjar\",\ \"gen/chrome/android/chrome_vr_android_java_enums_srcjar.srcjar\",\ \"gen/chrome/android/chrome_java__rjava_resources.srcjar\",\ \"gen/chrome/android/chrome_java.generated.srcjar\"\] --target-name //chrome/android:chrome_java__compile_java --header-jar obj/chrome/android/chrome_java.turbine.jar --classpath=\[\"obj/chrome/android/chrome_java.turbine.jar\"\] --classpath=@FileArg\(gen/chrome/android/chrome_java.build_config.json:deps_info:javac_full_interface_classpath\) --java-version=1.8 --bootclasspath=@FileArg\(gen/chrome/android/chrome_java.build_config.json:android:sdk_interface_jars\) --chromium-code=1 --warnings-as-errors --jar-info-exclude-globs=\[\"\*/AppHooksImpl.class\",\ \"\*/R.class\",\ \"\*/R\\\$\*.class\",\ \"\*/Manifest.class\",\ \"\*/Manifest\\\$\*.class\",\ \"\*/GEN_JNI.class\"\] --processor-arg=dagger.fastInit=enabled @gen/chrome/android/chrome_java.sources
Traceback (most recent call last):
  File "../../build/android/gyp/compile_java.py", line 785, in <module>
    sys.exit(main(sys.argv[1:]))
  File "../../build/android/gyp/compile_java.py", line 781, in main
    pass_changes=True)
  File "/root/chromium/src/build/android/gyp/util/md5_check.py", line 64, in CallAndWriteDepfileIfStale
    track_subpaths_allowlist=track_subpaths_allowlist)
  File "/root/chromium/src/build/android/gyp/util/md5_check.py", line 155, in CallAndRecordIfStale
    function(*args)
  File "../../build/android/gyp/compile_java.py", line 775, in <lambda>
    changes, options, javac_cmd, javac_args, java_files),
  File "../../build/android/gyp/compile_java.py", line 420, in _OnStaleMd5
    enable_partial_javac=True)
  File "../../build/android/gyp/compile_java.py", line 549, in _RunCompiler
    fail_on_output=options.warnings_as_errors)
  File "/root/chromium/src/build/android/gyp/util/build_utils.py", line 271, in CheckOutput
    stderr = stderr_filter(stderr)
  File "../../build/android/gyp/compile_java.py", line 231, in ProcessJavacOutput
    return '\n'.join(lines)
  File "/root/chromium/src/build/android/gyp/javac_output_processor.py", line 83, in <genexpr>
    return (self._ApplyColors(l) for l in lines)
  File "/root/chromium/src/build/android/gyp/javac_output_processor.py", line 103, in _ElaborateLinesForUnknownSymbol
    previous_line, line)
  File "/root/chromium/src/build/android/gyp/javac_output_processor.py", line 145, in _ElaborateLineForUnknownSymbol
    should_build=False)
  File "../../tools/android/modularization/convenience/lookup_dep.py", line 127, in __init__
    self._class_index = self._index_root()
  File "../../tools/android/modularization/convenience/lookup_dep.py", line 179, in _index_root
    check=True)
  File "/usr/lib/python3.6/subprocess.py", line 423, in run
    with Popen(*popenargs, **kwargs) as process:
TypeError: __init__() got an unexpected keyword argument 'capture_output'
ninja: build stopped: subcommand failed.

how can I fix this error?


Solution

  • You should add it manually to chrome/android/BUILD.gn to the section deps = [...] In your case it should look like

    "//third_party/android_deps:com_amplitude_android_sdk_java",