MCPcopy Index your code
hub / github.com/JackyAndroid/AndroidChromium

github.com/JackyAndroid/AndroidChromium @56

Chat with this repo
repository ↗ · DeepWiki ↗ · release 56 ↗ · + Follow
17,703 symbols 51,787 edges 1,125 files 8,694 documented · 49%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

欢迎在GitHub或者掘金上关注我

GitHub: https://github.com/JackyAndroid

掘金: https://gold.xitu.io/user/562dc7cc60b20fc9817962a2


AndroidChromium

简介

  • 谷歌浏览器安卓版源码项目
  • 本项目是世界级的安卓架构
  • 理清本项目业务逻辑完全可以胜任国内一线公司工程师
  • 本项目会长期跟进并升级谷歌浏览器内核版本,欢迎star

注意事项

如果使用的是AndroidStudio 2.0以上版本且开启instant run功能,建议关闭后再进行调试(instant run会修改首先启动的Application导致chrome provider context 引用错误导致crash)

效果图

以下为升级Chromium内核步骤


准备

参考官方及其他教程编译通过chromium源码,并能生成chrome.apk

目的

使用AndroidStudio开发环境调试Chromium Android UI层。

构建思路

  1. 采用Android Studio作为开发环境,从Chromium for Android抽取chrome模块的源码,加入Android project。
  2. native代码在chromium环境中build,作为so加入Android project
  3. 基础模块(base, content, net等)在chromium环境build为jar包,加入Android project
  4. content, chrome, ui等模块的资源文件加入Android library project

资源文件为什么不能直接都添加到Android project呢?

因为命名空间的原因,比如content模块的资源的命名空间为org.chromium.content, chrome模块的资源的命名空间为 org.chromium.chrome,所以需要建立不同的Android library project, 指定不同的包名。

本项目和源码目录对应关系

app/libs ----------- chromium/src/out/gnbuild/lib.java

app/src/main/aidl ----------- chromium/src/chrome/android/java/src/android/support/customtabs/*.aidl

app/src/main/assets ----------- chromium/src/out/gnbuild/

app/src/main/java ------------ chromium/src/chrome/android/java/src

app/src/main/jniLibs ----------- chromium/src/out/gnbuild/

app/src/main/res(app module 初始化资源)

libraries/androidmedia_res ----------- chromium/src/third_party/android_media/java/res

libraries/chrome_res ----------- chromium/src/chrome/android/java/res && chromium/src/chrome/android/java/res_chromium

libraries/content_res ----------- chromium/src/content/public/android/java/res

libraries/datausagechart_res --------- chromium/src/third_party/android_data_chart/java/res

libraries/ui_res ---------- chromium/src/ui/android/java/res

内核升级注意事项

  1. pak和dat等文件需要加入到assets目录,而且不能压缩
  2. aidl文件加入到main/aidl下
  3. 目前构建的chromium版本是55.0.2883.99
  4. 因为某些java文件是通过C文件编译生成,只存在chromium/src/out 目录下或存在于out下jar包中。如果按以上对应关系升级版本缺失文件,请到out/目录下去搜索,根据命名空间添加相应文件。还有一些临时生成的xml资源文件也需要从out/目录下去拷贝到相应的资源模块。

感谢

本项目灵感来自于365browser

License

Copyright 2016 Jacky Wang<jacky.android@foxmail.com>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Extension points exported contracts — how you extend this code

AppMenuHandlerFactory (Interface)
Factory which creates the AppMenuHandler. [19 implementers]
app/src/main/java/org/chromium/chrome/browser/ChromeActivity.java
NativePage (Interface)
An interface for pages that will be shown in a tab using Android views instead of html. [9 implementers]
app/src/main/java/org/chromium/chrome/browser/NativePage.java
ShouldLaunchCallback (Interface)
Callback for #shouldLaunchBrowserIfStopped. The run method is invoked on the UI thread. [159 implementers]
app/src/main/java/org/chromium/chrome/browser/BackgroundSyncLauncher.java
ItemSelectedCallback (Interface)
An interface to implement to get a callback when something has been selected. [12 implementers]
app/src/main/java/org/chromium/chrome/browser/ItemChooserDialog.java
TabModel (Interface)
TabModel organizes all the open tabs and allows you to create new ones. Regular and Incognito tabs are kept in differen [7 …
app/src/main/java/org/chromium/chrome/browser/tabmodel/TabModel.java

Core symbols most depended-on inside this repo

get
called by 790
app/src/main/java/org/chromium/chrome/browser/ChromeActivity.java
size
called by 453
app/src/main/java/org/chromium/chrome/browser/widget/DateDividedAdapter.java
add
called by 424
app/src/main/java/org/chromium/chrome/browser/feedback/FeedbackCollector.java
getContext
called by 389
app/src/main/java/org/chromium/chrome/browser/compositor/layouts/LayoutManagerHost.java
getString
called by 387
app/src/main/java/org/chromium/chrome/browser/database/SQLiteCursor.java
getActivity
called by 324
app/src/main/java/org/chromium/chrome/browser/signin/AccountSigninView.java
getApplicationContext
called by 284
app/src/main/java/org/chromium/chrome/browser/tab/Tab.java
setVisibility
called by 247
app/src/main/java/org/chromium/chrome/browser/omnibox/SuggestionView.java

Shape

Method 15,994
Class 1,384
Interface 272
Enum 53

Languages

Java100%

Modules by API surface

app/src/main/java/org/chromium/chrome/browser/preferences/PrefServiceBridge.java242 symbols
app/src/main/java/org/chromium/chrome/browser/tab/Tab.java232 symbols
app/src/main/java/org/chromium/chrome/browser/autofill/PersonalDataManager.java155 symbols
app/src/main/java/org/chromium/chrome/browser/omnibox/LocationBarLayout.java142 symbols
app/src/main/java/org/chromium/chrome/browser/ChromeActivity.java131 symbols
app/src/main/java/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java116 symbols
app/src/main/java/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java114 symbols
app/src/main/java/org/chromium/chrome/browser/sync/ProfileSyncService.java105 symbols
app/src/main/java/org/chromium/chrome/browser/download/DownloadManagerService.java105 symbols
app/src/main/java/org/chromium/chrome/browser/compositor/layouts/phone/StackLayout.java103 symbols
app/src/main/java/org/chromium/chrome/browser/toolbar/ToolbarPhone.java102 symbols
app/src/main/java/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java101 symbols

For agents

$ claude mcp add AndroidChromium \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact