android - 在 Android Studio 中为 android 构建 Chromium 时出错
问题描述
我正在尝试在 Ubuntu 16.04 机器上为 Android 构建 Chromium 作为 Android Studio 项目。
我按照here和here的说明成功创建了一个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 中进行一些额外的更改以修复更多错误 -
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 dexer;没有帮助。
解决方案
多么令人沮丧!看起来你可能错过了一些测试。您是否尝试过指定目标并确保包含测试?我觉得应该是这样的...
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'
推荐阅读
- image - 枕头:如何显示 MNIST 数据?
- python - TclError:无效的命令名称“.4318456072”
- build - NUnit 将输出从 Build 更改为 Tests
- python - Python pandas数据框:找到E列为1且A列最大的行,在平局的情况下,考虑B、C、D列中最大的
- excel - 如果搜索页面url出错则继续处理
- facebook - facebook messenger 切换协议 take_thread_control
- c# - 将字符串写入串行设备后,SerialDevice 写入应用程序关闭且没有警告。C# UWP
- javascript - 使用 SVG 绘制大量文本和框会杀死浏览器
- javascript - 使用 ajax 将信息传递给 db
- webpack - weback4 为反应组件创建供应商文件