首页 > 解决方案 > 在 Android Studio 中为 android 构建 Chromium 时出错

问题描述

我正在尝试在 Ubuntu 16.04 机器上为 Android 构建 Chromium 作为 Android Studio 项目。

我按照herehere的说明成功创建了一个gradle项目。但是在Android Studio(3.1.2 stable)中导入后出现很多构建错误。

生成 gradle 项目的命令 -

build/android/gradle/generate_gradle.py --output-directory out/Default --project-dir ~/Projects/chromium_source/gradle_project

Android Studio 中的错误 -

构建项目

FAILURE: Build failed with an exception.

What went wrong:
Could not resolve all files for configuration ':url.url_unittests_apk:debugCompileClasspath'.
> Failed to transform file 'junit.jar' to match attributes {artifactType=android-classes} using transform JarTransform
> Transform output file /home/sagarjoshi/Projects/chromium_source/src/out/Default/lib.java/third_party/junit/junit.jar does not exist.
> Failed to transform file 'hamcrest-core.jar' to match attributes {artifactType=android-classes} using transform JarTransform
> Transform output file /home/sagarjoshi/Projects/chromium_source/src/out/Default/lib.java/third_party/hamcrest/hamcrest-core.jar does not exist.
> Failed to transform file 'ub-uiautomator.jar' to match attributes {artifactType=android-classes} using transform JarTransform
> Transform output file /home/sagarjoshi/Projects/chromium_source/src/out/Default/lib.java/third_party/ub-uiautomator/ub-uiautomator.jar does not exist.
> Failed to transform file 'runner-release-no-dep.jar' to match attributes {artifactType=android-classes} using transform JarTransform
> Transform output file /home/sagarjoshi/Projects/chromium_source/src/out/Default/lib.java/third_party/android_support_test_runner/runner-release-no-dep.jar does not exist.
> Failed to transform file 'exposed-instrumentation-api-publish-no-dep.jar' to match attributes {artifactType=android-classes} using transform JarTransform
> Transform output file /home/sagarjoshi/Projects/chromium_source/src/out/Default/lib.java/third_party/android_support_test_runner/exposed-instrumentation-api-publish-no-dep.jar   does not exist.
> Failed to transform file 'rules_java.jar' to match attributes {artifactType=android-classes} using transform JarTransform
> Transform output file /home/sagarjoshi/Projects/chromium_source/src/out/Default/lib.java/third_party/android_support_test_runner/rules_java.jar does not exist.

build/android/gradle/generate_gradle.py --output-directory out/Default --target //chrome/android:chrome_public_apk 

制作模块 chrome.android.chrome_public_apk

    /home/sagarjoshi/Projects/chromium_source/src/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java:18: error: cannot find symbol
import org.chromium.base.MemoryPressureLevel;
                        ^
  symbol:   class MemoryPressureLevel
  location: package org.chromium.base
/home/sagarjoshi/Projects/chromium_source/src/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java:186: error: cannot find symbol
    private IChildProcessService mService;
            ^
  symbol:   class IChildProcessService
  location: class ChildProcessConnection
/home/sagarjoshi/Projects/chromium_source/src/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java:20: error: cannot find symbol
import org.chromium.base.BuildConfig;
                        ^
  symbol:   class BuildConfig
  location: package org.chromium.base
/home/sagarjoshi/Projects/chromium_source/src/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/action/FeedActionHandler.java:13: error: cannot find symbol
import org.chromium.ui.base.PageTransition;
                           ^
  symbol:   class PageTransition
  location: package org.chromium.ui.base
/home/sagarjoshi/Projects/chromium_source/src/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/action/FeedActionHandler.java:14: error: package org.chromium.ui.mojom does not exist
import org.chromium.ui.mojom.WindowOpenDisposition;
                            ^
/home/sagarjoshi/Projects/chromium_source/src/content/public/android/java/src/org/chromium/content_public/browser/LoadUrlParams.java:9: error: package org.chromium.content_public.browser.navigation_controller does not exist
import org.chromium.content_public.browser.navigation_controller.LoadURLType;

/home/sagarjoshi/Projects/chromium_source/src/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java:42: error: cannot find symbol
import org.chromium.chrome.R;
                          ^
  symbol:   class R
  location: package org.chromium.chrome
:chrome.android.chrome_public_apk:compileDebugJavaWithJavac FAILED

更新

--full标志添加到命令会添加包含所有缺失依赖项的提取的 srcjars提取的资源文件夹。但是,这会完全挂起我的机器,除非我有选择地构建目标。

build/android/gradle/generate_gradle.py --output-directory out/Default --full --target //chrome/android:chrome_public_apk --target //chrome/android:chrome_junit_tests

我不得不在chrome_public_apk build.gradle 中进行一些额外的更改以修复更多错误 -

  1. cannot find symbol class GeneratedMessageLite

    java.filter.exclude 中删除这一行 "com/google/protobuf/*.java"

  2. duplicate class: com.google.protobuf.LazyFieldLite

    java.srcDirs中替换

    "../../../../src/third_party/android_protobuf/src/java/src/main/java"

    经过

    "../../../../src/third_party/android_protobuf/src/java/src/main/java/com/google/protobuf/nano"

  3. cannot access ViewerType class file for com.google.vr.ndk.base.GvrApi$ViewerType not found

    在依赖项块中替换

    "../../../../src/out/Default/lib.java/third_party/gvr-android-sdk/gvr_common_java.jar"

    经过

    "../../../../src/out/Default/lib.java/third_party/gvr-android-sdk/gvr_common_java.interface.jar"

编译器错误消失了,但失败并出现以下错误 -

com.android.builder.dexing.DexArchiveBuilderException: Failed to process /home/sagarjoshi/Projects/chromium_source/gradle_full_chrome_public/chrome/android/chrome_public_apk/build/intermediates/transforms/desugar/debug/18.jar
    at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:550)
    at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.lambda$convertToDexArchive$1(DexArchiveBuilderTransform.java:488)
    at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.android.builder.dexing.DexArchiveBuilderException: Error while dexing com/google/vr/ndk/base/GvrApi.class

    at com.android.builder.dexing.DxDexArchiveBuilder.getExceptionToRethrow(DxDexArchiveBuilder.java:143)
    at com.android.builder.dexing.DxDexArchiveBuilder.convert(DxDexArchiveBuilder.java:89)
    at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:545)
    ... 6 more
Caused by: com.android.dex.util.ExceptionWithContext
    at com.android.dex.util.ExceptionWithContext.withContext(ExceptionWithContext.java:45)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:398)
    at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:150)
    at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:102)
    at com.android.builder.dexing.DxDexArchiveBuilder.dex(DxDexArchiveBuilder.java:107)
    at com.android.builder.dexing.DxDexArchiveBuilder.convert(DxDexArchiveBuilder.java:86)
    ... 7 more
Caused by: java.lang.NullPointerException
    at com.android.dx.cf.code.ConcreteMethod.<init>(ConcreteMethod.java:80)
    at com.android.dx.cf.code.ConcreteMethod.<init>(ConcreteMethod.java:69)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:300)
    ... 11 more

我也尝试过使用 D8 dexer;没有帮助。

标签: androidandroid-studiogradleandroid-gradle-pluginchromium

解决方案


多么令人沮丧!看起来你可能错过了一些测试。您是否尝试过指定目标并确保包含测试?我觉得应该是这样的...

build/android/gradle/generate_gradle.py \
    --output-directory out/Default \
    --project-dir ~/Projects/chromium_source/gradle_project \
    --target '//chrome/android:chrome_public_apk' \
    --target '//chrome/android:chrome_junit_tests'

推荐阅读