Я пытаюсь собрать Chromium для Android на компьютере с Ubuntu 16.04 в качестве проекта Android Studio.
Я следовал инструкциям здесь и здесь и успешно создал проект gradle. Но после импорта в Android Studio возникает много ошибок сборки (стабильная версия 3.1.2).
Команда для создания проекта 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 к команде добавляются папки extract-srcjars и extract-res , содержащие все отсутствующие зависимости. Однако при этом полностью зависает моя машина, если только я не строю цели выборочно.
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, чтобы исправить еще несколько ошибок -
cannot find symbol class GeneratedMessageLite
Удалить эту строку из java.filter.exclude
"com/google/protobuf/*.java"
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"
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; не помогло.