Android 开发小贴士

Android 开发小贴士

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

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

    解决办法:
    app的build.gradle 中

// 1. 添加配置
defaultConfig {
	......
	multiDexEnabled true
}

// 2. 清除缓存,重启Android Studio
Invalidate Caches/Restart
  1. 获取.apk的MD5、签名公钥等

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

在这里插入图片描述

2.2 命令行获取MD5信息

// cmd输入此
keytool -list -v -keystore /***/yiqi.jks | openssl dgst -md5

// 输入密钥库口令即可

但是经确认,复制一个同样的.jks文件,获取的md5值就改变了,所以你在网路搜到的此类方式是错误的。

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;
    }

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获取方法。(推荐)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初心一点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值