ARAPK Ref Injector
EN预约演示

SELF-HOSTED APK REFERER INJECTION

APK 渠道参数,
不重签也能带上。

在下载响应中附加渠道参数,不重签、不反编译,也不改动 APK 原有内容。一次部署即可获得 Console、下载统计、离线授权和 Android AAR SDK。

  • 无需重新签名
  • 流式下载
  • 单文件部署
POST /d/... · response path
$ curl -I "https://apk.example.com/d/demo/base.apk?referer=channel-a"
200 OK content-length: 4821930
x-signature-preserved: true
// APK metadata
channel-marker = "channel-a"
package contents unchanged
ZIP entriesunchanged
Channel marker+ referer
Original signaturepreserved
Package metadataunchanged
原签名保持有效不重签、不修改 APK 内容
0 次重新签名不反编译、不改 Manifest
1 个可执行文件Console 与下载服务一起部署
流式下载大文件也能稳定返回

WHY IT EXISTS

渠道包不该以重签名为代价。

传统做法为每个渠道复制、重签 APK,既慢又难审计。APK Ref Injector 在下载响应中附加渠道参数,让一个母包服务所有下载来源。

01

复制与重签成本

每新增渠道就复制、签名、上传;包多、流程长、存储膨胀。

02

签名与完整性风险

重签改变证书与安装身份;脚本出错时很难定位是渠道包还是母包的问题。

03

统计与投放断层

渠道参数停留在下载链接,安装后的 App 拿不到,归因只能靠间接推断。

REQUEST PATH

一次下载,四步完成。

从下载请求到 APK 返回,全程保持原包结构不变。

01

接收请求

从下载地址读取渠道参数。

02

安全注入

在下载响应中附加渠道标记。

03

保持原包

不重签、不修改 APK 内容。

04

流式返回

返回带渠道标记的 APK,不缓冲整个文件。

CORE CAPABILITIES

从注入到运营,一套自托管栈。

所有组件都在同一个二进制和同一个运维边界内。

+

注入核心

严格校验 APK 结构与签名格式,遇到不支持的包会明确拒绝。

+

Console

上传母包、管理应用、复制下载地址、查看统计。

+

下载统计

按渠道、时间和状态汇总;统计不影响下载速度。

+

离线授权

许可证离线校验;续费只需更新授权文件。

+

生命周期 CLI

install / start / stop / status / license update / uninstall。

+

可审计交付

单文件可执行程序、systemd unit、配置样例与 license.zip。

OPERATIONS

一台机器,一个二进制。

生产环境使用 systemd;数据保存在本机,升级和续费都有明确路径。

  • 单文件部署 — 无外部运行时依赖。
  • 反向代理友好 — Nginx/Caddy 终止 TLS,转发原始 Host 与协议。
  • 数据留在本机 — 数据库、上传的 APK 与图标都在本地数据目录。
  • 没有 Docker — 不要求容器、编排或外部数据库。
terminalsystemd
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

让 App 自己读到渠道参数。

AAR 内置读取能力,Kotlin 只暴露一个同步 API。客户不需要集成解析逻辑,也不需要存储权限。

  • 坐标 — lib.apkreferer:reader:1.0.0
  • 设备支持 — 主流 ARM 与 x86_64 设备
  • 返回状态 — Found / NotFound / Error
  • 读取范围 — 仅当前应用自己的 APK

查看 SDK 文档 →

Kotlinlib.apkreferer.reader
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 内容保持不变。

不支持的 APK 怎么办?

会明确拒绝。仅支持结构完整、签名格式受支持的 APK,不会对不确定的包做猜测处理。

referer 会写进日志吗?

不会记录完整值。统计按原值聚合,日志只保留必要上下文;许可证、密码和会话密钥同样不会进入日志。

必须用 Docker 吗?

不需要,也不提供容器方案。交付物是可执行程序、systemd unit、配置样例和 license.zip。

把渠道参数带到安装之后。

告诉我们应用规模、部署环境和当前渠道流程,我们会准备一份针对性的演示与部署建议。

邮件将打开你的默认邮件客户端;v1 不收集在线表单数据。