Skip to content

Commit

Permalink
copilot辅助生成说明文档
Browse files Browse the repository at this point in the history
  • Loading branch information
LIghtJUNction committed Oct 4, 2024
1 parent 3131ece commit 45f6809
Show file tree
Hide file tree
Showing 8 changed files with 410 additions and 7 deletions.
24 changes: 23 additions & 1 deletion MyModule/boot-completed.sh
Original file line number Diff line number Diff line change
@@ -1 +1,23 @@
#这个脚本将会在 Android 系统启动完毕后以服务模式运行
# 这个脚本将在 Android 系统启动完毕后以服务模式运行
#!/bin/sh
# boot-completed.sh
#
# 这个脚本会在 Android 系统完全启动并发送 ACTION_BOOT_COMPLETED 广播后执行。
# 它在 late_start 服务模式下运行,这意味着它与启动过程的其余部分并行操作。
#
# 用法:
# - 将此脚本放置在模块的目录中,以便在系统启动完成后自动执行。
# - 通过运行 `chmod +x boot-completed.sh` 确保脚本是可执行的。
#
# 环境变量:
# - MODDIR: 模块的基本目录路径。使用此变量引用模块的文件。
# - KSU: 表示脚本在 KernelSU 环境中运行。此值设置为 `true`。
#
# 示例:
# - 使用此脚本执行系统完全启动后需要执行的任务,例如启动服务或执行清理任务。
#
# 注意:
# - 避免使用可能阻塞或显著延迟启动过程的命令。
# - 确保此脚本启动的任何后台任务都得到妥善管理,以避免资源泄漏。
#
# 有关更多信息,请参阅 KernelSU 文档中的启动脚本部分。
47 changes: 47 additions & 0 deletions MyModule/customize.sh
Original file line number Diff line number Diff line change
@@ -1 +1,48 @@
# customize.sh 脚本说明
#
# 脚本功能:
# 1. 打印自定义安装过程的开始信息。
# 2. 检查设备架构,并根据架构类型打印相应信息或终止安装。
# 3. 检查 Android API 版本,确保版本在支持范围内,否则终止安装。
# 4. 设置指定文件和目录的权限。
# 5. 打印自定义安装过程的完成信息。
#
# 脚本详细说明:
# - ui_print: 用于在安装过程中打印信息到控制台。
# - case "$ARCH" in ... esac: 检查设备架构,支持 "arm", "arm64", "x86", "x64" 四种架构。
# - abort: 用于终止安装过程并打印错误信息。
# - if [ "$API" -lt 23 ]; then ... fi: 检查 Android API 版本,要求版本不低于 23。
# - set_perm: 设置单个文件的权限。
# - set_perm_recursive: 递归设置目录及其内容的权限。




# 示例 customize.sh

# 打印信息到控制台
ui_print "开始自定义安装过程..."

# 检查设备架构
case "$ARCH" in
"arm" | "arm64")
ui_print "设备架构为 ARM"
;;
"x86" | "x64")
ui_print "设备架构为 x86"
;;
*)
abort "不支持的设备架构: $ARCH"
;;
esac

# 检查 Android API 版本
if [ "$API" -lt 23 ]; then
abort "不支持的 Android 版本: $API"
fi

# 设置文件权限
set_perm "$MODPATH/somefile" 0 0 0644
set_perm_recursive "$MODPATH/somedir" 0 0 0755 0644

ui_print "自定义安装过程完成"
13 changes: 10 additions & 3 deletions MyModule/post-fs-data.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
#可选文件
#这个脚本将会在 post-fs-data 模式下运行
#
# 可选文件
# 这个脚本将会在 post-fs-data 模式下运行
#
# 说明:
# post-fs-data.sh 是一个可选的启动脚本文件,它将在 post-fs-data 模式下运行。
# 在这个模式下,脚本会在任何模块被挂载之前执行,这使得模块开发者可以在模块被挂载之前动态地调整它们的模块。
# 这个阶段发生在 Zygote 启动之前,并且是阻塞的,在执行完成之前或者 10 秒钟之后,启动过程会暂停。
# 请注意,使用 setprop 会导致启动过程死锁,建议使用 resetprop -n <prop_name> <prop_value> 代替。


29 changes: 29 additions & 0 deletions MyModule/post-mount.sh
Original file line number Diff line number Diff line change
@@ -1 +1,30 @@

# 这个脚本将在 post-mount 模式下运行。
#
# post-mount 模式说明:
# - 这个阶段是阻塞的。在执行完成之前或者 10 秒钟之后,启动过程会暂停。
# - 脚本在任何模块被挂载之前运行。这使得模块开发者可以在模块被挂载之前动态地调整它们的模块。
# - 这个阶段发生在 Zygote 启动之前。
# - 使用 setprop 会导致启动过程死锁!请使用 `resetprop -n <prop_name> <prop_value>` 代替。
# - **只有在必要时才在此模式下运行脚本**。
#
# 变量:
# - `MODDIR=${0%/*}`:获取模块的基本目录路径。
# - `KSU` (bool):标记此脚本运行在 KernelSU 环境下,此变量的值将永远为 `true`。
# - `KSU_VER` (string):KernelSU 当前的版本名字 (如: `v0.4.0`)。
# - `KSU_VER_CODE` (int):KernelSU 用户空间当前的版本号 (如. `10672`)。
# - `KSU_KERNEL_VER_CODE` (int):KernelSU 内核空间当前的版本号 (如. `10672`)。
# - `BOOTMODE` (bool):此变量在 KernelSU 中永远为 `true`。
# - `MODPATH` (path):当前模块的安装目录。
# - `TMPDIR` (path):可以存放临时文件的目录。
# - `ZIPFILE` (path):当前模块的安装包文件。
# - `ARCH` (string):设备的 CPU 构架,有如下几种: `arm`, `arm64`, `x86`, or `x64`。
# - `IS64BIT` (bool):是否是 64 位设备。
# - `API` (int):当前设备的 Android API 版本 (如:Android 6.0 上为 `23`)。
#
# 函数:
# - `ui_print <msg>`:打印 <msg> 到控制台。避免使用 'echo',因为它不会显示在自定义恢复的控制台中。
# - `abort <msg>`:打印错误信息 <msg> 到控制台并终止安装。避免使用 'exit',因为它会跳过终止清理步骤。
# - `set_perm <target> <owner> <group> <permission> [context]`:设置目标文件的权限和所有者。
# - `set_perm_recursive <directory> <owner> <group> <dirpermission> <filepermission> [context]`:递归设置目录及其内容的权限和所有者。
#这个脚本将会在 post-mount 模式下运行
184 changes: 184 additions & 0 deletions MyModule/sepolicy.rule
Original file line number Diff line number Diff line change
@@ -1 +1,185 @@
#这个文件中的 SELinux 策略将会在系统启动时加载
# 这个文件中的 SELinux 策略将会在系统启动时加载
# 你可以在这里定义你的 SELinux 策略规则

# 示例:
# allow <源类型> <目标类型> : <类> { <权限> };
# 例如:
# allow my_app my_data_file: file { read write };

# 详细说明:
# 1. 源类型(source type):这是发起操作的主体类型,例如一个应用程序的类型。
# 2. 目标类型(target type):这是操作的目标类型,例如一个文件的类型。
# 3. 类(class):这是操作的对象类别,例如文件、目录、进程等。
# 4. 权限(permissions):这是允许的具体操作,例如读取、写入、执行等。

# 你可以使用以下命令来查看系统中已有的类型、类和权限:
# sesearch -A -s <源类型> -t <目标类型> -c <类> -p <权限>

# 注意事项:
# 1. 确保你的策略规则不会破坏系统的安全性。
# 2. 在测试环境中验证你的策略规则,确保它们按预期工作。
# 3. 避免使用过于宽泛的权限,尽量使用最小权限原则。

# 例如,允许 my_app 类型的进程读取和写入 my_data_file 类型的文件:
allow my_app my_data_file: file { read write };

# 例如,允许 web_server 类型的进程读取和执行 web_content 类型的文件:
allow web_server web_content: file { read execute };

# 例如,允许 database_server 类型的进程读取、写入和创建 database_data 类型的文件:
allow database_server database_data: file { read write create };

# 例如,允许 backup_service 类型的进程读取和写入 backup_storage 类型的目录:
allow backup_service backup_storage: dir { read write };

# 例如,允许 admin_tool 类型的进程管理 system_log 类型的文件:
allow admin_tool system_log: file { read write append };

# 例如,允许 network_service 类型的进程绑定到 network_port 类型的端口:
allow network_service network_port: tcp_socket { name_bind };

# 例如,允许 user_app 类型的进程读取和写入 user_data 类型的文件:
allow user_app user_data: file { read write };

# 例如,允许 security_daemon 类型的进程读取和写入 security_config 类型的文件:
allow security_daemon security_config: file { read write };

# 例如,允许 media_player 类型的进程读取 media_content 类型的文件:
allow media_player media_content: file { read };

# 例如,允许 printer_service 类型的进程读取和写入 print_jobs 类型的文件:
allow printer_service print_jobs: file { read write };

# 例如,允许 update_service 类型的进程读取和写入 update_package 类型的文件:
allow update_service update_package: file { read write };

# 例如,允许 audit_service 类型的进程读取和写入 audit_logs 类型的文件:
allow audit_service audit_logs: file { read write };

# 例如,允许 vpn_service 类型的进程绑定到 vpn_port 类型的端口:
allow vpn_service vpn_port: tcp_socket { name_bind };

# 例如,允许 email_client 类型的进程读取和写入 email_data 类型的文件:
allow email_client email_data: file { read write };

# 例如,允许 chat_app 类型的进程读取和写入 chat_history 类型的文件:
allow chat_app chat_history: file { read write };

# 例如,允许 game_engine 类型的进程读取和写入 game_assets 类型的文件:
allow game_engine game_assets: file { read write };

# 例如,允许 cloud_sync 类型的进程读取和写入 cloud_storage 类型的文件:
allow cloud_sync cloud_storage: file { read write };

# 例如,允许 analytics_service 类型的进程读取和写入 analytics_data 类型的文件:
allow analytics_service analytics_data: file { read write };

# 例如,允许 voice_assistant 类型的进程读取和写入 voice_commands 类型的文件:
allow voice_assistant voice_commands: file { read write };

# 例如,允许 sensor_service 类型的进程读取和写入 sensor_data 类型的文件:
allow sensor_service sensor_data: file { read write };

# 例如,允许 payment_service 类型的进程读取和写入 transaction_records 类型的文件:
allow payment_service transaction_records: file { read write };

# 例如,不允许 my_app 类型的进程读取和写入 system_config 类型的文件:
dontaudit my_app system_config: file { read write };

# 例如,不允许 guest_user 类型的进程执行 admin_tool 类型的文件:
dontaudit guest_user admin_tool: file { execute };

# 例如,不允许 untrusted_app 类型的进程访问 sensitive_data 类型的文件:
dontaudit untrusted_app sensitive_data: file { read write };

# 例如,不允许 external_service 类型的进程绑定到 internal_port 类型的端口:
dontaudit external_service internal_port: tcp_socket { name_bind };

# 例如,不允许 test_app 类型的进程读取和写入 production_data 类型的文件:
dontaudit test_app production_data: file { read write };

# 例如,允许 maintenance_service 类型的进程读取和写入 maintenance_logs 类型的文件:
allow maintenance_service maintenance_logs: file { read write };

# 例如,允许 monitoring_service 类型的进程读取和写入 monitoring_data 类型的文件:
allow monitoring_service monitoring_data: file { read write };

# 例如,允许 scheduler_service 类型的进程读取和写入 schedule_data 类型的文件:
allow scheduler_service schedule_data: file { read write };

# 例如,允许 notification_service 类型的进程读取和写入 notification_data 类型的文件:
allow notification_service notification_data: file { read write };

# 例如,允许 sync_service 类型的进程读取和写入 sync_data 类型的文件:
allow sync_service sync_data: file { read write };

# 例如,允许 logging_service 类型的进程读取和写入 log_files 类型的文件:
allow logging_service log_files: file { read write };

# 例如,允许 cache_service 类型的进程读取和写入 cache_data 类型的文件:
allow cache_service cache_data: file { read write };

# 例如,允许 indexing_service 类型的进程读取和写入 index_data 类型的文件:
allow indexing_service index_data: file { read write };

# 例如,允许 search_service 类型的进程读取和写入 search_index 类型的文件:
allow search_service search_index: file { read write };

# 例如,允许 backup_service 类型的进程读取和写入 backup_data 类型的文件:
allow backup_service backup_data: file { read write };

# 例如,允许 sync_service 类型的进程读取和写入 sync_logs 类型的文件:
allow sync_service sync_logs: file { read write };

# 例如,允许 telemetry_service 类型的进程读取和写入 telemetry_data 类型的文件:
allow telemetry_service telemetry_data: file { read write };

# 例如,允许 update_service 类型的进程读取和写入 update_logs 类型的文件:
allow update_service update_logs: file { read write };

# 例如,允许 diagnostic_service 类型的进程读取和写入 diagnostic_data 类型的文件:
allow diagnostic_service diagnostic_data: file { read write };

# 例如,允许 alert_service 类型的进程读取和写入 alert_logs 类型的文件:
allow alert_service alert_logs: file { read write };

# 例如,允许 api_service 类型的进程读取和写入 api_logs 类型的文件:
allow api_service api_logs: file { read write };

# 例如,允许 auth_service 类型的进程读取和写入 auth_logs 类型的文件:
allow auth_service auth_logs: file { read write };

# 例如,允许 config_service 类型的进程读取和写入 config_files 类型的文件:
allow config_service config_files: file { read write };

# 例如,允许 data_service 类型的进程读取和写入 data_files 类型的文件:
allow data_service data_files: file { read write };

# 例如,允许 event_service 类型的进程读取和写入 event_logs 类型的文件:
allow event_service event_logs: file { read write };

# 例如,允许 file_service 类型的进程读取和写入 file_data 类型的文件:
allow file_service file_data: file { read write };

# 例如,允许 image_service 类型的进程读取和写入 image_files 类型的文件:
allow image_service image_files: file { read write };

# 例如,允许 video_service 类型的进程读取和写入 video_files 类型的文件:
allow video_service video_files: file { read write };

# 例如,允许 audio_service 类型的进程读取和写入 audio_files 类型的文件:
allow audio_service audio_files: file { read write };

# 例如,允许 report_service 类型的进程读取和写入 report_files 类型的文件:
allow report_service report_files: file { read write };

# 例如,允许 log_service 类型的进程读取和写入 log_data 类型的文件:
allow log_service log_data: file { read write };



# 你可以参考以下网站以获取更多关于 SELinux 策略规则的信息:
# https://selinuxproject.org/page/Main_Page
# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_selinux/index
# https://wiki.archlinux.org/title/SELinux
59 changes: 59 additions & 0 deletions MyModule/service.sh
Original file line number Diff line number Diff line change
@@ -1 +1,60 @@
#这个脚本将会在 late_start 服务模式下运行
# 获取模块的基本目录路径
MODDIR=${0%/*}

# 在此处编写您的服务脚本逻辑
# 例如,您可以在此处添加需要在 late_start 服务模式下运行的命令

# 示例:打印一条消息到日志
echo "服务脚本已启动" >> /data/local/tmp/service.log

# 示例:设置系统属性
resetprop ro.example.property "example_value"

# 示例:启动一个后台服务
nohup some_background_service &

# 示例:执行一个耗时的任务 sleep 10等待10秒
sleep 10

# 示例:打印一条消息到日志
echo "服务脚本已完成" >> /data/local/tmp/service.log

# 请注意:
# - 避免使用可能阻塞或显著延迟启动过程的命令。
# - 确保此脚本启动的任何后台任务都得到妥善管理,以避免资源泄漏。

# 有关更多信息,请参阅 KernelSU 文档中的启动脚本部分。

# 示例:检查设备的架构并执行相应的操作
if [ "$(uname -m)" = "aarch64" ]; then
echo "设备架构为 arm64" >> /data/local/tmp/service.log
# 在此处添加针对 arm64 架构的命令
else
echo "设备架构为其他" >> /data/local/tmp/service.log
# 在此处添加针对其他架构的命令
fi

# 示例:检查某个文件是否存在
if [ -f /data/local/tmp/some_file ]; then
echo "文件存在" >> /data/local/tmp/service.log
# 在此处添加文件存在时的处理逻辑
else
echo "文件不存在" >> /data/local/tmp/service.log
# 在此处添加文件不存在时的处理逻辑
fi

# 示例:设置权限
chmod 644 /data/local/tmp/service.log

# 示例:创建一个目录
mkdir -p /data/local/tmp/my_service_dir

# 示例:写入环境变量到文件
echo "MY_ENV_VAR=my_value" > /data/local/tmp/my_service_dir/env_vars

# 示例:启动另一个脚本
sh /data/local/tmp/my_service_dir/another_script.sh & Compare this snippet from MyModule/service.sh: # 这个脚本将在服务模式下运行



Loading

0 comments on commit 45f6809

Please sign in to comment.