码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Android 开发小贴士


    Android 开发小贴士

    1. 应用编译时报错:Unable to merge dex

      可能原因: 包引用重复 、方法数超限或者几个库之间有重复代码块(特别是在整理module时容易犯)。

      解决办法:
      app的build.gradle 中

    // 1. 添加配置
    defaultConfig {
    	......
    	multiDexEnabled true
    }
    
    // 2. 清除缓存,重启Android Studio
    Invalidate Caches/Restart
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 获取.apk的MD5、签名公钥等

    2.1 keytool 获取文件的SHA256等信息,但是无法获取 MD5

    在这里插入图片描述

    2.2 命令行获取MD5信息

    // cmd输入此
    keytool -list -v -keystore /***/yiqi.jks | openssl dgst -md5
    
    // 输入密钥库口令即可
    
    但是经确认,复制一个同样的.jks文件,获取的md5值就改变了,所以你在网路搜到的此类方式是错误的。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.3 代码获取

        /**
         * 获取签名MD5值
         *
         * @param context
         * @return
         */
        public static String getMD5(Context context) {
            String res = "";
            ArrayList<String> mlist = getSignInfo(context, MD5);
            if (mlist != null && mlist.size() != 0) {
                res = mlist.get(0);
            }
            return res;
        }
    
    	/**
         * 返回一个签名的对应类型的字符串
         *
         * @param context
         * @param type
         * @return 因为一个安装包可以被多个签名文件签名,所以返回一个签名信息的list
         */
        public static ArrayList<String> getSignInfo(Context context, String type) {
            if (context == null || type == null) {
                return null;
            }
            String packageName = context.getPackageName();
            if (packageName == null) {
                return null;
            }
            if (mSignMap.get(type) != null) {
                return mSignMap.get(type);
            }
            ArrayList<String> mList = new ArrayList<String>();
            try {
                Signature[] signs = getSignatures(context, packageName);
                for (Signature sig : signs) {
                    String tmp = "error!";
                    if (MD5.equals(type)) {
                        tmp = getSignatureByteString(sig, MD5);
                    } else if (SHA1.equals(type)) {
                        tmp = getSignatureByteString(sig, SHA1);
                    } else if (SHA256.equals(type)) {
                        tmp = getSignatureByteString(sig, SHA256);
                    }
                    mList.add(tmp);
                }
            } catch (Exception e) {
                Log.e("e", e.getMessage());
            }
            mSignMap.put(type, mList);
            return mList;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    2.4 jadx 获取(同时也可获取到签名公钥)

    可参阅文末 "延伸阅读"的第8篇文章。

    在这里插入图片描述

    总结:第3、4种获取的MD5值是完全一致的。

    延伸阅读
    1. Android 开发中不可不知的技巧
    2. 《Android 经验分享》周刊第 1 期
    3. 10 条提升 Android 性能的建议
    4. Unable to merge dex
    5. 获取Android签名MD5的方式
    6. Android 应用获取签名MD5
    7. jks获取公钥私钥
    8. APP 备案公钥、签名 MD5获取方法。(推荐)
  • 相关阅读:
    腾讯云PaaS份额稳居市场第二,25年技术积累打造安全稳定云上服务
    【38. 最长上升子序列】
    Redis详解(一)
    创业了...
    mysql高阶sql语句
    Spring整合其他技术
    vscode ssh linux C++ 程序调试
    Redis系列:数据持久化提高可用性
    NISP-SO网络安全运维是什么?安全运维工程师
    2024年csdn最新最全pytest系列——pytest-rerunfailures插件之测试用例失败重跑
  • 原文地址:https://blog.csdn.net/zmm911zmm/article/details/100146014
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号