复制与重签成本
每新增渠道就复制、签名、上传;包多、流程长、存储膨胀。
SELF-HOSTED APK REFERER INJECTION
在下载响应中附加渠道参数,不重签、不反编译,也不改动 APK 原有内容。一次部署即可获得 Console、下载统计、离线授权和 Android AAR SDK。
WHY IT EXISTS
传统做法为每个渠道复制、重签 APK,既慢又难审计。APK Ref Injector 在下载响应中附加渠道参数,让一个母包服务所有下载来源。
每新增渠道就复制、签名、上传;包多、流程长、存储膨胀。
重签改变证书与安装身份;脚本出错时很难定位是渠道包还是母包的问题。
渠道参数停留在下载链接,安装后的 App 拿不到,归因只能靠间接推断。
REQUEST PATH
从下载请求到 APK 返回,全程保持原包结构不变。
从下载地址读取渠道参数。
在下载响应中附加渠道标记。
不重签、不修改 APK 内容。
返回带渠道标记的 APK,不缓冲整个文件。
CORE CAPABILITIES
所有组件都在同一个二进制和同一个运维边界内。
严格校验 APK 结构与签名格式,遇到不支持的包会明确拒绝。
上传母包、管理应用、复制下载地址、查看统计。
按渠道、时间和状态汇总;统计不影响下载速度。
许可证离线校验;续费只需更新授权文件。
install / start / stop / status / license update / uninstall。
单文件可执行程序、systemd unit、配置样例与 license.zip。
OPERATIONS
生产环境使用 systemd;数据保存在本机,升级和续费都有明确路径。
sudo ./apk-ref-injector install \ --license /path/to/license.zip \ --public-url https://apk.example.com sudo apk-ref-injector status sudo systemctl restart apk-ref-injector
ANDROID SDK
AAR 内置读取能力,Kotlin 只暴露一个同步 API。客户不需要集成解析逻辑,也不需要存储权限。
val result = RefererReader.read(context)
when (result) {
is RefererResult.Found -> use(result.referer)
RefererResult.NotFound -> { /* 无渠道标记 */ }
is RefererResult.Error -> handle(result.code)
}SECURITY & LIMITS
不猜测不确定的 APK 结构,不记录敏感值,不把渠道参数当成可信输入。
不会。渠道标记在下载响应中附加,原签名和 APK 内容保持不变。
会明确拒绝。仅支持结构完整、签名格式受支持的 APK,不会对不确定的包做猜测处理。
不会记录完整值。统计按原值聚合,日志只保留必要上下文;许可证、密码和会话密钥同样不会进入日志。
不需要,也不提供容器方案。交付物是可执行程序、systemd unit、配置样例和 license.zip。