You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中使用apksig库编程实现APK签名

Android 端使用 apksig 库实现 APK 签名完整示例

1. 导入依赖

在 app 模块的 build.gradle dependencies 块中添加 apksig 库依赖:

dependencies {
    // 选用和你项目AGP版本匹配的稳定版即可,这里以7.4.0为例
    implementation 'com.android.tools.build:apksig:7.4.0'
}

2. 加载密钥与X509证书

首先从你的密钥库(.jks/.keystore)中取出签名需要的私钥和证书对象,示例代码:

import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;

// 密钥库参数,替换为你自己的配置
String keystorePath = "/sdcard/your_keystore.jks";
String keystorePwd = "your_keystore_password";
String alias = "your_key_alias";
String keyPwd = "your_key_password";

// 加载密钥库
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(new FileInputStream(keystorePath), keystorePwd.toCharArray());
// 获取私钥和证书
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, keyPwd.toCharArray());
X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias);

如果你的私钥和证书是其他格式存储的,只需要按照对应格式解析得到 PrivateKey 和 X509Certificate 实例即可,不需要调整后续签名逻辑。

3. 核心APK签名逻辑

直接调用 apksig 提供的签名工具完成签名输出:

import com.android.apksig.ApkSigner;
import com.android.apksig.apk.ApkFormatException;
import java.io.File;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SignatureException;
import java.util.ArrayList;
import java.util.List;

// 输入输出路径,替换为你自己的路径
File inputApk = new File("/sdcard/input.apk");
File outputSignedApk = new File("/sdcard/output_signed.apk");

// 构造签名者配置
List<ApkSigner.SignerConfig> signerConfigs = new ArrayList<>();
ApkSigner.SignerConfig signerConfig = new ApkSigner.SignerConfig.Builder()
        .setPrivateKey(privateKey)
        .setCertificates(List.of(cert))
        .build();
signerConfigs.add(signerConfig);

// 构造签名器,可按需开启/关闭不同签名方案
ApkSigner apkSigner = new ApkSigner.Builder(signerConfigs)
        .setInputApk(inputApk)
        .setOutputApk(outputSignedApk)
        .setV1SigningEnabled(true) // 开启v1签名,兼容Android 7.0以下
        .setV2SigningEnabled(true) // 开启v2签名,Android 7.0+推荐
        .setV3SigningEnabled(true) // 开启v3签名,Android 9.0+支持
        .build();

// 执行签名
try {
    apkSigner.sign();
} catch (ApkFormatException | IOException | NoSuchAlgorithmException | InvalidKeyException | SignatureException e) {
    e.printStackTrace();
    // 处理签名异常
}

4. 必要配置说明

  • 权限配置:需要在AndroidManifest中申请读写存储权限,Android 10及以上版本需要适配分区存储,确保可以读写输入输出APK文件
  • 签名方案选择:如果你的签名APK需要兼容Android 6.0及更低版本,必须开启v1签名
  • 依赖版本匹配:apksig库版本尽量和你项目的Android Gradle Plugin版本保持一致,避免兼容性问题

内容的提问来源于stack exchange,提问作者rax64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:15:03