/V1Signer

【AS Module】Android APK V1签名源码模块,也可以用于普通的jar包签名

Primary LanguageJavaGNU General Public License v2.0GPL-2.0

V1Signer

Android APK v1签名库,便于开发跟APK签名有关的应用 或者利用生成的jar包手动签名

说明

本项目包含两个Module, 使用的均是V1签名,签名后可适用所有Android版本。

  • JarSigner -> sun提供的签名方案
  • ApkSigner -> android提供的签名方案

还有一个名为app的DEMO模块,可运行试用

本项目可在Android7.0及以上运行(暂不兼容Android10.0)

由于JarSignerApkSigner中有相同的class,无法打包成releaseAPK,接入时需要去掉一个module,但是debug模式可以直接运行

效果

JarSigner

Module的关于签名的源码全部来源于 https://github.com/frohoff/jdk8u-jdk ,用于给Android Apk签名

开发使用

  1. 如果是使用java开发,只需要复制 com.sun.jarsignersun.security.tools.jarsigner 两个package到你的项目中即可

  2. 如果是android开发

    1. 添加jitpack的maven库

      repositories {
        maven { url 'https://jitpack.io' }
      }
      
    2. 添加依赖

      dependencies {
          implementation 'cn.janking.V1Signer:jarsigner:0.0.1'
      }
      
  3. 调用sun.security.tools.jarsigner.Main.main(String[] args)

    //例如
    sun.security.tools.jarsigner.Main.main(
        arrayOf(
            "-verbose",
            "-keystore", "[keystore路径]",
            "-storepass", "[storepass]",
            "-keyPass", "[keyPassword]",
            "-signedjar",
            "[签名后apk输出路径]",
            "[待签名apk路径]",
            "[key alias秘钥别名]"
        )
    )

手动使用

直接使用打包好的jarsigner.jar包(链接),在命令行中输入

//linux
$jarsigner [-verbose] -keystore "~/Desktop/test.jks"  -storepass 123456  -keyPass 123456 -signedjar "~/Desktop/test.apk" "~/Desktop/unsigned.apk" test
//windows
$java -jar .\jarsigner.jar [-verbose] -keystore "C:\\test.jks"  -storepass 123456  -keyPass 123456 -signedjar "C:\\test.apk" "C:\\unsigned.apk" test

注意

如果是在Android设备上适用,要使用BKS-V1类型的秘钥,一般用AndroidStudio生成的jks秘钥是JKS类型,可以使用 KeyStore Explorer 查看和转换签名类型

ApkSigner

Module的关于签名的源码来源于Android源码和jdk1.8.0_241,使用IntelliJ Idea反编译获得,用于给Android Apk签名

开发使用

  1. 如果是java开发,只需要复制 SignApk.java(链接)文件到你的项目中即可

  2. 如果是android开发

    1. 添加jitpack的maven库

      repositories {
        maven { url 'https://jitpack.io' }
      }
      
    2. 添加依赖

      dependencies {
          implementation 'cn.janking.V1Signer:apksigner:0.0.1'
      }
      
  3. 调用SignApk.Main(String[] args)

    //例如
    com.android.signapk.SignApk.main(
        arrayOf(
            "[公钥路径]",
            "[私钥路径]",
            "[待签名apk路径]",
            "[签名后apk输出路径]"
        )
    )

手动使用

直接使用打包好的apksigner.jar包(链接),在命令行中输入

//linux
$signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar
//windows
$java -jar apksigner.jar [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar