01 chromium 打包文件基本信息
我们一般使用mini_installer工程制作安装包,而直接相关的是setup工程。这两个工程文件目录如下:
out\DebugX64\obj\chrome\installer\mini_installer\mini_installer.vcxproj
out\DebugX64\obj\chrome\installer\setup\setup.vcxproj
chromium的完整项目all.sln,因为vs2019本身是32位程序,调试工程项目本身太大,比较不稳定,崩溃概率较大。如果用vs调试,最好裁剪掉all.sln的项目数量,或者独立打开感兴的项目。一般需要借助https://github.com/chromium/vs-chromium插件。目前(20210313)版本https://github.com/chromium/vs-chromium/releases/download/v0.9.37/VsChromium-0.9.37.vsix。如果下载失败,多尝试几次,或者找个vpn吧。
开源的世界也是有区分的,比如:chromium里面的插件的
default_apps
功能,内置了隔离区域。chrome/browser/extensions/default_apps.cc
。
02 关于mini_installer
chrome/installer/mini_installer/chrome.release
中列出了所有需要打包的文件。
注意:这里是打包文件,就是mini_installer.exe里面会把指定的文件和文件夹加入。
chrome/installer/mini_installer/chrome.release
中的文件是单文件列出的,默认不支持目录。可以考虑修改这个chrome.release的处理脚本chrome/tools/build/win/create_installer_archive.py
,增加对自己添加的目录的支持。
demo如下:
import string
# add copy dirs files
def CopyDirs(path, dst_path):
lsdir = os.listdir(path)
dirs = [cdir for cdir in lsdir if os.path.isdir(os.path.join(path, cdir))]
for d in dirs:
curdir = os.path.join(path, d)
dstdir = os.path.join(dst_path, d)
if curdir and not os.path.exists(dstdir):
#print(dstdir)
if not os.path.exists(dstdir):
g_archive_inputs.append(curdir)
os.makedirs(dstdir)
#print(curdir)
#print(dstdir)
CopyDirs(curdir, dstdir)
files = [i for i in lsdir if os.path.isfile(os.path.join(path,i))]
for f in files:
curfile = os.path.join(path, f)
dstfile = os.path.join(dst_path, f)
if not os.path.exists(dstfile):
g_archive_inputs.append(curfile)
#print(curfile)
#print(dstfile)
shutil.copy(curfile, dstfile)
# def CopySectionFilesToStagingDir add
# g_archive_inputs.append(src_path) after mod
# out\ReleaseX64\selfData dir
if(string.find(src_path, '.\\selfData') == 0):
CopyDirs(src_path, dst_path)
else:
shutil.copy(src_path, dst_dir)
当安装包增加了文件或文件夹后,在安装的时候,需要指定对这些文件或文件夹的处理。
这个处理过程在’chrome/installer/setup/installer_worker.cc’中。
如果不是运行时加载的dll、exe等应用,可以直接加入 void AddChromeWorkItems
函数,如果是运行时加载的内容。最好按照void AddChromeWorkItems
完全相同的方法增加处理函数。
比如:我在out\ReleaseX64\selfData 目录下增加了一些非运行时资源,可以用如下方式处理。
在 void AddChromeWorkItems
函数内的适当位置增加
// zhangfj 20210313 拷贝内置插件到Application目录中
install_list->AddCopyTreeWorkItem(src_path.Append(L"selfData"),
target_path.Append(L"selfData"),
temp_path, WorkItem::NEW_NAME_IF_IN_USE,
new_chrome_exe);
这样即可将selfData文件夹按照到按照目录。