Chrome浏览器Apk桌面版定制化开发(Chromium编译,132.0.6778.0)

编译Chromium注意事项:

系统要求

最好用最新稳定版的ubuntu系统编译(省去编译过程中的很多麻烦):

ubuntu版本:ubuntu-24.04.1-live-server-amd64

磁盘空间:至少180GB的可用磁盘空间(官方说的是100GB,实际上根本不够)。

内存:至少8GB内存,有条件的话可以整到16GB内存及以上(具体以电脑内存的一半合适,太大了会导致电脑非常卡)。

cpu:总核数越多越好,以实际机器支持为准。

编译环境:Vmare虚拟机。

虚拟机设置:

要想后面编译顺利快速,少走弯路,这步设置很关键。

修改虚拟机的内存大小为16GB(具体以你电脑支持的为准)。

修改虚拟机的cpu处理器数量,和每个处理器的内核数量,使得处理器内核总数达到最大为佳(以你实际电脑能支撑的最大核数为准,也不宜太大,否则电脑会有点卡顿)。

修改虚拟机磁盘空间,虚拟机默认创建的磁盘空间通常只有20GB,这对我们来说远远不够,我们需要将磁盘空间扩充到至少180GB。虚拟机扩容可参考:Vmare扩展ubuntu磁盘大小(扩容)

增加swap交换空间(推荐设置这个),有利于减轻内存的压力。

bash 复制代码
#增加 Swap 空间(这个16G看你自己需要,也可以是4G,这个swapfile可以随便定义,比如swapfile1、swapfile2),可以依次增加多个:
sudo fallocate -l 16G /swapfile  # 创建 16G 的 swap 文件
sudo chmod 600 /swapfile        # 设置权限
sudo mkswap /swapfile           # 设置 swap
sudo swapon /swapfile           # 启用 swap

编译Chromium:

拉取chromium:

bash 复制代码
git clone https://chromium.googlesource.com/chromium/tools/depot_tools

加入环境变量:

bash 复制代码
export PATH="$PATH:/home/pc/depot_tools"
source ~/.bashrc   # 或 source ~/.zshrc

执行fetch脚本需要权限,需要给相应脚本赋予执行权限:

shell 复制代码
chmod -R +x  /home/pc/depot_tools
​
#chmod +x depot_tools/fetch
#chmod +x depot_tools/gclient
#chmod +x depot_tools/vpython3
#chmod +x depot_tools/cipd

新建chromium文件夹并拉取源码(顺利的话大概需要1个半小时左右的样子):

bash 复制代码
mkdir chromium && cd chromium
​
fetch --nohooks --no-history  android
# gclient sync

安装build依赖:

bash 复制代码
cd /home/pc/chromium/src
build/install-build-deps.sh

运行钩子:

复制代码
gclient runhooks

源码编译:

ini 复制代码
#chmod +r /home/pc/chromium/src/third_party/androidx/cipd/BUILD.gn
​
gn gen --args='target_os="android" target_cpu="arm"' out/Default

编译生成apk:

sql 复制代码
autoninja -C out/Default chrome_public_apk
#执行完后生成apk,apk的路径在:/home/pc/chromium/src/out/Default/apks/ChromePublic.apk
​
#清理out/Default下的其它编译生成文件
# gn clean out/Default

解决编译过程中的其他问题(可跳过):

bash 复制代码
#清理并重新同步:
gclient sync --reset
#更新仓库到最新版本:
git pull origin main
gclient sync
#权限问题,导致 BUILD.gn 文件无法读取。
ls -l /home/pc/chromium/src/third_party/androidx/cipd/BUILD.gn
​
chmod +r /home/pc/chromium/src/third_party/androidx/cipd/BUILD.gn

内存不够导致的问题:构建过程在编译 csa-optimize-phase.cc 文件时被系统杀掉了("Killed"),通常这意味着系统资源不足,可能是内存不足或进程占用了太多的 CPU 资源。

bash 复制代码
#增加 Swap 空间:
sudo fallocate -l 4G /swapfile  # 创建 4G 的 swap 文件
sudo chmod 600 /swapfile        # 设置权限
sudo mkswap /swapfile           # 设置 swap
sudo swapon /swapfile           # 启用 swap
​

Chromium定制化:

修改out/Default/args.gn

ini 复制代码
sudo vim out/Default/args.gn
 
#args.gn
target_os = "android"
target_cpu = "arm"
​
is_debug = false
enable_nacl = false
​
​
# 使用Chrome官方的编译优化建议
is_official_build = true
# 分散链接编译
is_component_build = false
# 不使用官方API秘钥
use_official_google_api_keys = false
​
# 支持H264编码
proprietary_codecs = true
# 解码器
ffmpeg_branding = "Chrome"
# 解决不能播放MP4格式的视频问题
chrome_pgo_phase = 0 
rtc_use_h264  = true
​
treat_warnings_as_errors = false

查看gn args支持哪些参数:

scss 复制代码
gn args --list out/Default

chromium默认编译出来的装到手机上后是以手机模式运行的,我们想要把他改成电脑模式:

ini 复制代码
grep -rnw './chrome/android/java/src/org/chromium/chrome/browser' -e 'ChromeActivity'
# 找到chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
​
sudo vim chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
# 搜索 getUseDesktopUserAgent,
将 usingDesktopUserAgent = !usingDesktopUserAgent; 
改成:usingDesktopUserAgent = true;
​
#搜索 getWebContents , 在  if (tab != null) {
下加上:               
boolean usingDesktopUserAgent = true;
Profile profile = getCurrentTabModel().getProfile();
RequestDesktopUtils.setRequestDesktopSiteContentSettingsForUrl(profile, tab.getUrl(), usingDesktopUserAgent);
TabUtils.switchUserAgent(tab,usingDesktopUserAgent,UseDesktopUserAgentCaller.ON_MENU_OR_KEYBOARD_ACTION);
TrackerFactory.getTrackerForProfile(profile).notifyEvent(EventConstants.APP_MENU_DESKTOP_SITE_EXCEPTION_ADDED);
RequestDesktopUtils.recordUserChangeUserAgent(usingDesktopUserAgent, getActivityTab());
​
​
​
​
​
# boolean usingDesktopUserAgent =
#                    currentTab.getWebContents().getNavigationController().getUseDesktopUserAgent();
​

更改应用包名(chromium默认的包名是org.chromium.chrome):

bash 复制代码
 sudo vim chrome/android/chrome_public_apk_tmpl.gni
 # 找到chrome_public_manifest_package , 将他的值替换成自己的包名
 # 查找chrome_public_manifest_package
 # grep -r 'chrome_public_manifest_package' .
shell 复制代码
sudo vim chrome/android/BUILD.gn
# 按ESC ,然后输入 /package = ,按enter确认后搜索,可按 n 键查找下一个。
#我们的目标是:manifest_package = chrome_public_manifest_package ,这个我们需要找到chrome_public_manifest_package这个定义的地方,并将他的值
#替换成我们自己的包名。
#注意不要修改这些 resources_package = "org.chromium.chrome",像其他模块下的也不用修改,比如 android_library("chrome_unit_test_util_java") #或者 android_library("chrome_test_util_java")
#或者 android_library("chrome_test_java") 或者  android_library("chrome_test_vr_java")
#或者 resources_package = "org.chromium.chrome.base"等都不用改。
​

查找应用版本号(这个可以跳过):

perl 复制代码
sudo vim chrome/android/BUILD.gn
# 输入 /version_code 回车查找到 trichrome_version_code
# 查找trichrome_version_code
grep -rnw './' -e 'trichrome_version_code'
# 很明显指向了 TRICHROME_VERSION_CODE
grep -rnw './build/' -e 'TRICHROME_VERSION_CODE'
# /android_chrome_version  GenerateVersionCodes
grep -rnw './build/' -e 'android_chrome_version'
​
grep -rnw './build/' -e 'GenerateVersionCodes'
# self.assertEqual(trichrome_version_code
​
perl 复制代码
# version_name = chrome_version_name
# 查找chrome_version_name
grep -rnw './' -e 'chrome_version_name'
# 很明显,指向了 chrome_version_full
#查找到 chrome_version_full = _result.full
# 查找_result.full
grep -rnw './' -e '_result.full'

修改应用图标:

bash 复制代码
grep -rnw './' -e 'res_chromium'
# fre_product_logo.png     product_logo_name.png
# chrome_app_java_resources
grep -rnw './' -e 'chrome_app_java_resources'
grep -rnw './' -e 'product_logo_name.png'
ls -l components/browser_ui/styles/android/java/res_chromium/drawable-*
# /home/pc/chromium/src/components/browser_ui/styles/android/java/res_chromium/drawable-xhdpi/fre_product_logo.png
# /home/pc/chromium/src/components/browser_ui/styles/android/java/res_chromium/drawable-xhdpi/product_logo_name.png
# 经过我们最终定位,发现应用的图标在components/browser_ui/styles/android/java/res_chromium目录下,将对应的图标都替换成你自己上传的即可。
​
# 替换该目录/home/pc/chromium/src/chrome/android/java/res_chromium_base下的所有app_icon.png 和 layered_app_icon.png 文件
比如 /home/pc/chromium/src/chrome/android/java/res_chromium_base/mipmap-hdpi

修改应用名称:

bash 复制代码
sudo vim chrome/android/java/res_chromium_base/values/channel_constants.xml
# 修改app_name 的值为应用的名字

屏蔽启动引导页:

kotlin 复制代码
sudo vim chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java
# 找到 /requiresFirstRunToBeCompleted ,将方法返回值由原来的true 改成false
​
sudo vim chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
# 找到 /if (FirstRunFlowSequencer.launch( , 将以下方法完整注释掉:
if (FirstRunFlowSequencer.launch(mActivity, mIntent, false /* requiresBroadcast */,
            false /* preferLightweightFre */)) {
    return Action.FINISH_ACTIVITY;
}

应用全屏显示:

ini 复制代码
sudo vim chrome/android/java/res/values-sw600dp-v26/styles.xml
#在style标签下方添加如下item:
​
<item name="android:windowLightStatusBar">false</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowActionBar">false</item>
​
sudo vim chrome/android/java/res/values-v26/styles.xml
# 这个跟上面设置一样
# 注意: <item name="android:windowLightStatusBar">@bool/window_light_status_bar</item>
        <item name="android:windowLightStatusBar">false</item>
#这两个标签不能同时用

移除首页所有菜单栏

ini 复制代码
sudo vim chrome/android/java/res_app/layout/main.xml
# 找到 /CoordinatorLayoutForPointer , 增加 android:layout_marginTop="-96dp" ,如下:
<org.chromium.components.browser_ui.widget.CoordinatorLayoutForPointer
        android:id="@+id/coordinator"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" 
        android:layout_marginTop="-96dp">
​

加载自己默认的标签页:

bash 复制代码
sudo vim components/embedder_support/android/java/src/org/chromium/components/embedder_support/util/UrlConstants.java
# 分别找到 /NTP_URL  和  /NTP_NON_NATIVE_URL  将他们的值修改成你默认要打开的网页地址

以上定制化配置全部修改完毕后,我们可以重新生成apk:

sql 复制代码
autoninja -C out/Default chrome_public_apk
#执行完后生成apk,apk的路径在:/home/pc/chromium/src/out/Default/apks/ChromePublic.apk

产品展示:

chromiun内核版本:132.0.6778.0

参考:Vmare扩展ubuntu磁盘大小(扩容)

juejin.cn/post/712151...

github.com/chromium/ch...

相关推荐
不可能掉发15 小时前
Env Guard:让浏览器一眼分清生产、测试和开发环境
前端·javascript·chrome·测试工具·html·开源软件·个人开发
小龙飞刀18 小时前
Chrome插件自动化测试:单元测试、集成测试
chrome·单元测试·集成测试
东方护航数据恢复(深圳)3 天前
服务器硬盘黄灯/红灯故障排查与处理命令全指南_东方护航数据恢复深圳店
运维·服务器·chrome
赵广陆3 天前
FastAPI零基础完整实战
前端·chrome·fastapi
Nuanyt4 天前
Linux系统的 Shell 常见指令和常见知识点(以bash为主)
linux·运维·chrome·bash
lpfasd1235 天前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
水瓶夜之6 天前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
代码对我眨眼睛6 天前
macOS Google Chrome 常用快捷键
前端·chrome·macos
小猪咪piggy7 天前
【AI 赋能测试】Langchain 框架的使用
人工智能·chrome·langchain
IT小白杨7 天前
从Chromium内核到云手机:2026数据采集环境隔离方案全解析
大数据·chrome·业界资讯·指纹浏览器