Chromium内核浏览器编译记(三)116版本内核UI定制

这篇具有很好参考价值的文章主要介绍了Chromium内核浏览器编译记(三)116版本内核UI定制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载请注明出处:https://blog.csdn.net/kong_gu_you_lan/article/details/132180843?spm=1001.2014.3001.5501

本文出自 容华谢后的博客

往期回顾:

Chromium内核浏览器编译记(一)踩坑实录

Chromium内核浏览器编译记(二)UI定制

0.写在前面

最近因为业务需求,需要编译最新版本的Chromium内核,目前最新的版本是116.0.5845.59,编译的过程中发现有一些代码逻辑修改的地方都变了,所以在此记录下,分享给大家。

定制需求是这样的:

  • 修改包名、版本号、应用图标、应用名称

  • 不显示应用第一次启动时的设置引导页

  • 应用全屏显示,移除首页的所有菜单栏

  • 增加点击两次退出应用的功能

  • 默认不加载新标签页

1.修改包名

源码路径:/chromium/src/chrome/android/chrome_public_apk_tmpl.gni

将下面两个属性的值替换成你要修改的包名就可以了:

chrome_public_manifest_package = "org.chromium.chrome"

chrome_public_test_manifest_package = "org.chromium.chrome.tests"

2.修改版本号

源码路径:/chromium/src/build/config/android/config.gni

将下面四个属性的值替换成你要修改的版本号就可以了:

android_default_version_code = "10000"
android_default_version_name = "1.00.00"

android_override_version_code = "10000"
android_override_version_name = "1.00.00"

3.修改应用图标

源码路径:/chromium/src/chrome/android/java/res_chromium_base

在这个目录下,有几个mipmap文件夹,把里面的图标替换下就可以,和AS项目是一样的。

4.修改应用名称

源码路径:/chromium/src/chrome/android/java/res_chromium_base/values/channel_constants.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <string name="app_name" translatable="false">应用名称</string>
</resources>

5.屏蔽启动引导页

源码路径:/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java

将requiresFirstRunToBeCompleted方法的返回值修改为false:

/**
 * Overriding this function is almost always wrong.
 * @return Whether or not the user needs to go through First Run before using this Activity.
 */
protected boolean requiresFirstRunToBeCompleted(Intent intent) {
    return false;
}

源码路径:/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java

删除或注释掉dispatch方法中下面的判断逻辑:

// Check if we should push the user through First Run.
if (FirstRunFlowSequencer.launch(mActivity, mIntent, false /* requiresBroadcast */,
            false /* preferLightweightFre */)) {
    return Action.FINISH_ACTIVITY;
}

6.应用全屏显示

源码路径:/chromium/src/chrome/android/java/res/values/styles.xml

在上面的源码中,找到Base.Theme.Chromium.WithWindowAnimation主题,增加下面的全屏设置属性:

<style name="Base.Theme.Chromium.WithWindowAnimation">
   ...
   
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowActionBar">false</item>
</style>

7.移除首页的所有菜单栏

源码路径:/chromium/src/chrome/android/java/res_app/layout/main.xml

在CoordinatorLayoutForPointer控件中,增加layout_marginTop属性,其实是往上移动了UI,把菜单栏隐藏了:

<merge
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

	...

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

</mergr>        

8.增加点击两次退出应用的功能

源码路径:/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java

在ChromeActivity类中增加下面的方法:

public int getTabsCount() {
    TabModelSelector modelSelector = getTabModelSelector();
    if (modelSelector == null) return 0;
    return modelSelector.getTotalTabCount();
}    

源码路径:/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java

修改minimizeAppAndCloseTabOnBackPress方法:

private boolean mExitApp;

private boolean minimizeAppAndCloseTabOnBackPress(@Nullable Tab currentTab) {
    if (currentTab == null) {
        BackPressManager.record(BackPressHandler.Type.MINIMIZE_APP_AND_CLOSE_TAB);
        MinimizeAppAndCloseTabBackPressHandler.record(MinimizeAppAndCloseTabType.MINIMIZE_APP);
        assertOnLastBackPress();
        moveTaskToBack(true);
        return true;
    }
    // TAB history handler has a higher priority and should navigate page back before
    // minimizing app and closing tab.
    assert !currentTab.canGoBack()
        : "Tab should be navigated back before closing or exiting app";
    final boolean shouldCloseTab = backShouldCloseTab(currentTab);
    final WebContents webContents = currentTab.getWebContents();

    // Minimize the app if either:
    // - we decided not to close the tab
    // - we decided to close the tab, but it was opened by an external app, so we will go
    //   exit Chrome on top of closing the tab
    final boolean minimizeApp = false;

    BackPressManager.record(BackPressHandler.Type.MINIMIZE_APP_AND_CLOSE_TAB);
    assertOnLastBackPress();

    if (minimizeApp) {
        if (shouldCloseTab) {
            MinimizeAppAndCloseTabBackPressHandler.record(
                    MinimizeAppAndCloseTabType.MINIMIZE_APP_AND_CLOSE_TAB);
            sendToBackground(currentTab);
        } else {
            MinimizeAppAndCloseTabBackPressHandler.record(
                    MinimizeAppAndCloseTabType.MINIMIZE_APP);
            sendToBackground(null);
        }
        return true;
    } else if (shouldCloseTab) {
        if (getTabsCount() > 1) {
            MinimizeAppAndCloseTabBackPressHandler.record(MinimizeAppAndCloseTabType.CLOSE_TAB);
            if (webContents != null) webContents.dispatchBeforeUnload(false);
            return true;
        }
        if (mExitApp) {
            MinimizeAppAndCloseTabBackPressHandler.record(MinimizeAppAndCloseTabType.CLOSE_TAB);
            if (webContents != null) webContents.dispatchBeforeUnload(false);
            return false;
        }
        Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
        mExitApp = true;
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                mExitApp = false;
            }
        }, 2000);
        return true;
    }
    return false;
}

9.默认不加载新标签页

源码路径:/chromium/src/components/embedder_support/android/java/src/org/chromium/components/embedder_support/util/UrlConstants.java

把下面两个参数,改成你想要显示的网页地址就可以了:

public static final String NTP_URL = "chrome-native://newtab/";

public static final String NTP_NON_NATIVE_URL = "chrome://newtab/";

10.导航栏背景

新版本的浏览器,底部导航栏背景是白色的,如果有修改背景颜色的需求,可以改这里:

源码路径:/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedNavigationBarColorController.java

把updateNavigationBarColor方法中,setNavigationBarIconColor参数改成false:

@SuppressLint("NewApi")
private void updateNavigationBarColor() {
    ...
    
    UiUtils.setNavigationBarIconColor(mRootView, false);
}

修改下面两个方法,冒号后面修改成你想要设置的导航栏背景颜色就可以了:

private @ColorInt int getNavigationBarColor(boolean forceDarkNavigationBar) {
    return forceDarkNavigationBar
            ? mContext.getColor(R.color.toolbar_background_primary_dark)
            : mContext.getColor(R.color.navigation_bubble_arrow);
}

private @ColorInt int getNavigationBarDividerColor(boolean forceDarkNavigationBar) {
    return forceDarkNavigationBar
            ? mContext.getColor(R.color.bottom_system_nav_divider_color_light)
            : mContext.getColor(R.color.navigation_bubble_arrow);
}

11.遇到的问题

更新源码的时候,遇到这个提示:

NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.

Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.

To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.

被墙了,已经设置了全局代理,还需要再加个配置,将下面的配置保存成文件**.boto**,然后配置下环境变量:

[boto]
proxy=127.0.0.1
proxy_port=端口号

环境变量:

export PATH="$PATH:$HOME/.boto"

注意:文章中是把depot_tool下载到了【home/用户名】目录下,所以使用【$HOME】代表,环境变量要根据实际下载的路径修改。

12.编译脚本

最后在附上args.gn编译脚本:

target_os = "android"
target_cpu = "arm"
# Release版本
is_debug = false
# 不允许远程调试
enable_remoting = false
# 使用Chrome官方的编译优化建议
is_official_build = true
# 分散链接编译
is_component_build = false
# 不使用官方API秘钥
use_official_google_api_keys = false
# 关闭支持NACL,这是一种Chrome插件,因为安全性,稳定性存在问题,已经很少使用了
enable_nacl = false

# 支持H264编码
proprietary_codecs = true
# 解码器
ffmpeg_branding = "Chrome"

# 解决不能播放MP4格式的视频问题
rtc_use_h264  = true

declare_args(){
  # 整体优化,对整个程序的多个编译单元进行全局优化,获取更好的性能和代码体积优化
  full_wpo_on_official = true
  # 删除内核层支持调试的符号文件
  remove_webcore_debug_symbols = false
  # 初始化FFmpeg
  rtc_initialize_ffmpeg = true
  # 支持OpenH264
  use_openh264 = true
}

13.写在最后

到这里,Chromium源码的UI定制就完成了,有问题可以给我留言评论,谢谢。文章来源地址https://www.toymoban.com/news/detail-822190.html

到了这里,关于Chromium内核浏览器编译记(三)116版本内核UI定制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium调用使用360浏览器,QQ浏览器,遨游浏览器,猎豹浏览器,Chromium

    国产的360安全浏览器,360急速浏览器,QQ浏览器,遨游浏览器甚至新版还未上市的Edge浏览器都是基于Chrome浏览器的开源版本Chronium开发来的。所以360浏览器可以理解为一个定制的Chrome浏览器,最新360安全浏览器是基于Chromium 63版本的,落后正式的Chrome版本。 我们下载对应的2

    2024年02月06日
    浏览(63)
  • Qt+C++自建网页浏览器-Chrome blink最新内核基础上搭建-改进版本

     程序示例精选 Qt+C++自建网页浏览器-Chrome blink最新内核基础上搭建-改进版本 如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助! 这篇博客针对Qt+C++自建网页浏览器-Chrome最新内核基础上搭建-改进版本编写代码,代码整洁,规则,易读。 学习

    2024年02月09日
    浏览(47)
  • 浏览器UA user-agent、windows各版本内核、搜索引擎爬虫UA归类

    ### 浏览器userAgent: 实际上很多浏览器套了壳,核心都是chrome和safari,大部分浏览器UA里面看倒数第二个或第一个字段就可以判断出是啥浏览器了,同一浏览器的UA版本上可能存在差异,但大致相同。 **servo 不支持es6** ```Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Servo/1.0 Firefox

    2024年02月02日
    浏览(71)
  • 谷歌浏览器自动更新到116,chormedriver库只有114的,怎么办

    参考链接:安装chromedriver 115,对应chrome版本115(经检验,116也可以使用) 解决方案:csdn搜下,谷歌搜下,别人已经解决过的抄就完了。 具体就是下了个参考链接里115版本的chromedriver,就可以了。

    2024年02月12日
    浏览(54)
  • Burp Suite 自带浏览器Burp‘s Browser(Chromium)沙盒sandbox问题的解决

    Burp Suite启动自带浏览器Burp’s Browser(Chromium)的时候,弹出does not support running without sandbox出错框。 解决方法,操作如下: Project options --Misc– Burp’s Browser -- Allow Burp’s browser to run without sandbox,勾选这个选项。

    2024年02月13日
    浏览(42)
  • 【electron】Puppeteer 和 Electron 共用同一个Chrome 或 Chromium浏览器二进制文件

    将 Puppeteer 的可执行路径设置为 Electron 的可执行路径来实现这一点 以下是一个示例代码,展示了如何在 Puppeteer 中使用 Electron 的浏览器二进制文件: 在上述代码中,你需要将 executablePath 变量设置为 Electron 的可执行路径。然后,在启动 Puppeteer 时,将 executablePath 设置为 laun

    2024年02月10日
    浏览(51)
  • springboot2.7以上版本配置swagger3.0.0版本浏览器无法打开swagger-ui

    1.最实用解决方式:将pom里的swagger依赖降到2.9.0即可 过低无法启动项目 1.2 Springboot2.6以后将SpringMVC 默认路径匹配策略从AntPathMatcher 更改为PathPatternParser Springfox 使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher 2.3.0.0版本swagger2访问地址为:http://loca

    2024年02月11日
    浏览(35)
  • 谈论浏览器内核

    浏览器内核是指浏览器使用的渲染引擎,用于解析并显示网页的内容。主要有以下几种浏览器内核: Trident(IE内核):由Microsoft开发,被用于Internet Explorer浏览器。目前已经被Edge取代。 Gecko:由Mozilla开发,被用于Firefox浏览器。 WebKit:由苹果公司开发,被用于Safari浏览器和

    2024年02月09日
    浏览(34)
  • 如何修改设置浏览器内核模式

    强制锁定极速模式 手动切换(用户)meta指定(开发者)浏览器兼容列表(浏览器) 需要用360安全浏览器14,chromium108内核,下载地址https://bbs.360.cn/thread-16068958-1-1.html 2023年2月14日,微软公司已停用IE浏览器,IE浏览器打不开了,建议网站尽快升级,支持极速模式, 微软计划于

    2024年02月09日
    浏览(49)
  • 主流浏览器有哪些?他们的内核是什么?

    浏览器 内核 公司 Navigator Gecko Netscape网景公司 Opera Presto、Blink Opera Software ASA IE Trident 微软 Edge Chromium 微软 Firefox Gecko Mozilla组织 Safari Webkit 苹果 Chrome Webkit、Chromium 、Blink Google 浏览器是一个多进程、多线程的应用程序。在一个浏览器中打开多个标签页,如果一个标签页内的内

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包