首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件签名 )

【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件签名 )

作者头像
韩曙亮
发布2023-03-28 19:06:01
发布2023-03-28 19:06:01
3.4K0
举报

文章目录

一、生成 jks 文件


选择 菜单栏/Build/Generate Signed Bundle / APK 选项 ,

在后续弹出的 Generate Signed Bundle or APK 对话框中 , 点击 Create new 按钮 ,

在下面的对话框中输入 jks 的密码 , Key 名称 , 及 Key 的密码 ;

密码都是

000000

生成结果 :

二、签名命令


参考 【Android 安全】DEX 加密 ( DEX 加密使用到的相关工具 | dx 工具 | zipalign 对齐工具 | apksigner 签名工具 ) 博客中的 apksigner 签名工具使用方法 ,

签名命令参考 :

代码语言:javascript
复制
apksigner sign  --ks jks文件路径 --ks-key-alias 别名名称 --ks-pass pass:jsk密码 --key-pass pass:别名密码 --out  out.apk in.apk

实际运行的签名命令 :

D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign –ks D:\002_Project\002_Android_Learn\DexEncryption\dex.jks –ks-key-alias Key0 –ks-pass pass:000000 –key-pass pass:000000 –out D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-signed-aligned.apk D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk

  • D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner 是完整的命令工具路径 ;
  • sign 表示操作选项 , 签名 ;
  • –ks D:\002_Project\002_Android_Learn\DexEncryption\dex.jks 指定签名 jks 文件路径 ;
  • –ks-key-alias Key0 指定别名 ;
  • –ks-pass pass:000000 指定别名密码 ;
  • –key-pass pass:000000 指定 jks 密码 ;
  • –out D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-signed-aligned.apk 指定输出文件路径 ;
  • D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk 指定输入文件路径 ;

完整代码示例 :

代码语言:javascript
复制
    /*
        5 . 签名操作
     */
    // 签名 apk 输出结果, 将 app-unsigned-aligned.apk 签名, 签名后的文件输出到 app-signed-aligned.apk 中
    var signedAlignApk = File("app/build/outputs/apk/debug/app-signed-aligned.apk")

    // 获取签名 jks 文件
    var jksFile = File("dex.jks")

    // 打印要执行的命令
    println("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign --ks ${jksFile.absolutePath} --ks-key-alias Key0 --ks-pass pass:000000 --key-pass pass:000000 --out ${signedAlignApk.absolutePath} ${unSignedAlignApk.absolutePath}")

    /*
        将 app-unsigned.apk 对齐
        使用 zipalign 工具命令

        注意 : Windows 命令行命令之前需要加上 "cmd /c " 信息 , Linux 与 MAC 命令行不用添加
     */
    process = Runtime.getRuntime().exec("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign --ks ${jksFile.absolutePath} --ks-key-alias Key0 --ks-pass pass:000000 --key-pass pass:000000 --out ${signedAlignApk.absolutePath} ${unSignedAlignApk.absolutePath}")

    // 打印错误日志
    var br = BufferedReader(InputStreamReader(process.errorStream))
    while ( true ){
        var line = br.readLine()
        if(line == null){
            break
        }else{
            println(line)
        }
    }
    br.close()

    // 等待上述命令执行完毕
    process.waitFor()

    // 执行结果提示
    if(process.exitValue() == 0){
        println("签名操作 执行成功");
    } else {
        println("签名操作 执行失败");
    }

三、执行结果


生成的签名文件结果 : 红色矩形框中的 app-signed-aligned.apk 就是生成的 apk 签名文件 ;

命令行输出 : 主要是展示完整的命令 ;

代码语言:javascript
复制
cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign --ks D:\002_Project\002_Android_Learn\DexEncryption\dex.jks --ks-key-alias Key0 --ks-pass pass:000000 --key-pass pass:000000 --out D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-signed-aligned.apk D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk
签名操作 执行成功

四、处理 Unsupported major.minor version 52.0 错误


处理 Unsupported major.minor version 52.0 错误 :

出现的错误 : 由于 电脑 上的 Java 版本低于 Android Studio 中的 Java 版本 ;

代码语言:javascript
复制
C:\Users\octop>D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign --ks D:\002_Project\002_Android_Learn\DexEncryption\dex.jks --ks-key-alias Key0 --ks-pass pass:000000 --key-pass pass:000000 --out D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-signed-aligned.apk D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/apksigner/ApkSignerTool : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
C:\Users\octop>java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

将电脑本身的 JDK 更新成 1.8 即可 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、生成 jks 文件
  • 二、签名命令
  • 三、执行结果
  • 四、处理 Unsupported major.minor version 52.0 错误
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档