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...

相关推荐
WwangXue6 小时前
mac如何下载 测试旧版chrome兼容问题
前端·chrome
浏览器爱好者6 小时前
Chrome和Firefox如何保护用户的浏览数据
前端·chrome·firefox
叶不休12 小时前
DOM---鼠标事件类型(移入移出)
开发语言·前端·javascript·css·chrome·前端框架·html
wdxylb1 天前
Linux下编写第一个bash脚本
开发语言·chrome·bash
网络研究院1 天前
新工具可绕过 Google Chrome 的新 Cookie 加密系统
前端·chrome·系统·漏洞·加密·绕过
雷哥AI工程化1 天前
AI coding:不会前端,却开发了个Chrome插件
chrome·aigc
浏览器爱好者1 天前
Chrome和Firefox哪款浏览器的密码管理更安全
chrome·安全·firefox
程序员JerrySUN1 天前
嵌入式浏览器 -- Chromium VS Firefox
linux·前端·chrome·物联网·firefox·chrome devtools
llrraa20102 天前
Chrome异步编程
前端·chrome
我的运维人生2 天前
Python 网络爬虫:基础与实践
chrome·爬虫·python·运维开发·技术共享