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

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

二、签名命令


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



签名命令参考 :


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 指定输入文件路径 ;


完整代码示例 :


 

/*
        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 签名文件 ;

image.png



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


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 版本 ;


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 即可 ;


目录
相关文章
|
9月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
267 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
9月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
812 19
|
12月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1292 83
|
9月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2326 2
|
9月前
|
数据采集 监控 API
加密货币 Pump 监测刮刀工具开发原理及实现路径
开发Pump监测刮刀工具需综合运用高频数据采集、波动率建模、跨平台对冲三大核心技术,2025年的技术瓶颈已从基础数据获取转向超低延迟执行与合规适配。建议采用模块化开发策略,优先实现核心监控功能,再逐步接入AI决策与链上套利模块。代码示例需根据最新交易所API文档动态调整,并严格遵守所在地监管法规。
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
11月前
|
安全 网络协议 算法
零基础IM开发入门(五):什么是IM系统的端到端加密?
本篇将通俗易懂地讲解IM系统中的端到端加密原理,为了降低阅读门槛,相关的技术概念会提及但不深入展开。
428 2
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
407 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
12月前
|
云安全 安全 数据建模
《数字证书:互联网世界的"身份证"与"防盗门"》 ——揭秘网络安全背后的加密江湖
在2023年某深夜,上海陆家嘴金融公司机房遭遇黑客攻击,神秘青铜大门与九大掌门封印的玉牌突现,阻止了入侵。此门象征数字证书,保障网络安全。数字证书如验钞机识别假币,保护用户数据。它通过SSL/TLS加密、CA认证和非对称加密,构建安全通信。证书分为DV、OV、EV三类,分别适合不同场景。忽视证书安全可能导致巨额损失。阿里云提供一站式证书服务,助力企业部署SSL证书,迎接未来量子计算和物联网挑战。
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密