Android 开发小贴士

2023-11-04

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获取方法。(推荐)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 开发小贴士 的相关文章

  • 如何在android中点击画布上绘制的圆圈?

    我正在开发一个人脸检测应用程序 在这个应用程序中 我必须在脸上的眼睛和嘴巴用户可以点击拖动圆圈 在检测到的人脸上根据自己设置位置 因此 所有圆圈都已成功绘制在脸上 但我无法单击特定圆圈并使用缩小选项在整个脸上移动 请建议我有关相同问题的正确
  • Whatsapp 在 Android 中共享音频文件时正在剪切音频文件

    我在共享格式不是 mp3 的音频文件时遇到问题 文件被共享 但长度较短 例如 如果文件有 10 秒 则仅共享 5 秒 如果我使用 mp3 格式 它会完全共享 但其他格式会出现问题 注意 该文件在其他应用程序 如Messenger 中共享没有
  • ActionBarCompat 支持库 android:selectableItemBackground 不起作用

    我正在使用新的 ActionBarCompat 支持库 操作栏中的操作按钮在按下时应更改其背景 它适用于 Android 4 3 但不适用于 Gingerbread 在姜饼中 如果我按下按钮 它不会改变背景 我什至改变了选择器 它再次适用于
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • 不使用 CookieManager 的 Android 会话 cookie

    我的应用程序进行多次网络调用以获得身份验证 我需要将此会话存储在 cookie 中 我想使用 Cookie Manager 但经过一些研究后 我发现它仅适用于 API 9 及更高版本 并且我的应用程序需要向后兼容 我使用 HTTPURLCo
  • Android 上的硬币识别

    我目前正在开发一个 Android 应用程序 它能够拍摄硬币的现有图像 或者使用内置摄像头扫描单个硬币 非常像 Google Goggles 我正在使用 Android 版 OpenCV 我的问题如下 什么方法最适合使用 OpenCV 在
  • 注销时Firebase facebook按钮android身份验证

    我在我的 Android 应用程序中使用 firebase 并在 facebook SDK 中使用登录 我面临的唯一问题是 当我使用 facebook 登录然后注销时 facebook 登录按钮处于 注销 状态 当我单击它时 它会询问我是否
  • 使用 POST 将数据从 Android 发送到 AppEngine Datastore

    抱歉 如果这是一个简单的问题 但我只是不知道我应该做什么 而且我认为我有点超出了我的深度 我想将数据从 Android 应用程序发送到在 Google App Engine 上运行的应用程序 数据必须从那里写入数据存储区 我的数据主要采用对
  • Android Things 文件系统

    我正在 Android 上构建这个应用程序 我希望能够让它访问 U 盘上的媒体文件 甚至树莓派的 SD 卡上的媒体文件 我还不知道我将如何处理这些文件 但我只是想知道它是否可能 如果不是这样也没关系 我还有其他解决方案 但我想我会先从明显的
  • 如何知道点击的widget id?

    我已经实施了一个widget与ImageButton and a TextView That ImageButton启动一个activity当它被点击时 这activity使用用户在活动上写入的内容更新小部件文本EditText 现在的问题
  • BluetoothLeScanner 服务内部问题

    Update从Android 10以上我认为你需要ACCESS BACKGROUND LOCATION权限 因此 如果此代码在最新的 Android 版本上不起作用 就是针对此问题的 ACCESS BACKGROUND LOCATION 受
  • Android 依赖项:apklib 与 aar 文件

    据我了解 apklib包含代码 共享资源Maven aar文件由以下人员分发Gradle The aar与 apklib 的主要区别在于 类被编译并包含在 aar 根目录下的classes jar 中 然而apklib不能包含已编译的类文件
  • 如何使用 onSearchRequested() 调用搜索对话框

    我正在尝试实现搜索对话框 但无法显示活动中的搜索 我在清单文件中定义了主要活动 此活动向用户显示了他们必须从中选择的选项列表 选项之一是 搜索 选项
  • 使用startActivityForResult,如何获取子活动中的requestCode?

    我有四项活动 即 A B C 和 D 我的情况是A将通过startActivityForResult启动活动B startActivityForResult new Intent this B class ONE 在另一种情况下 我将使用不
  • NoClassDefFoundError:com.google.firebase.FirebaseOptions

    我继续得到NoClassDefFoundError在我正在使用的其他测试设备 4 4 2 上 但在我的测试设备 Android 5 1 上运行良好 我尝试了用谷歌搜索的解决方案 但似乎没有任何效果 我正在使用 Firebase 实时数据库
  • 改造Android基本且简单的问题

    我的服务器返回简单的 Json 结果 如下所示 message Upload Success 我正在尝试将结果放入改造模型类中 public class MyResponse SerializedName message String me
  • 如果联系人与电话通讯录中的应用程序关联,则显示应用程序图标

    我正在尝试显示与该应用程序关联的电话号码的应用程序图标 我试着跟随this http www c99 org 2010 01 23 writing an android sync provider part 1 链接但是太难了 有没有任何库
  • Android 视图和视图组

    在安卓中ViewGroup继承自View A ViewGroup是一个容器 里面装有Views ViewGroup LinearLayout View TextView 为什么 Android 的人们将这种关系定义为Inheritance而
  • 在Android中提取视频帧

    我想知道是否可以从 Android 中正在运行的视频中提取帧 我需要定期提取帧并将其发送以进行进一步处理 有人能为我找到答案吗 Thanks Abhi 您可以使用媒体元数据检索器 http developer android com ref
  • Android:列“_id”不存在

    我收到这个错误 IllegalArgumentException 列 id 不存在 当使用SimpleCursorAdapter从我的数据库中检索 该表确实有这个 id柱子 注意到这是一个常见问题 我尝试根据网上的一些解决方案来解决它 但它

随机推荐

  • SD-WAN与MPLS VPN,MSTP,IPSEC VPN,SSL VPN有什么区别?

    对于目前市场上主流的SD WAN MPLS VPN SSL VPN IPSec VPN和MSTP等企业组网技术 想必大家一定不陌生 其实 MPLS VPN IPSec VPN SSL VPN都属于采用IP VPN技术的产品 IP VPN 虚
  • 重新启动elasticsearch 报错:org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException:

    cmd命令重新启动elasticsearch 报错 org elasticsearch bootstrap StartupException java lang IllegalStateException failed to obtain
  • java连接oracle数据库的各种方法及java在数据库中的含义

    java连接oracle数据库的各种方法及java在数据库中的含义 java与oracle的接口 在数据库中运行JAVA可以说是ORACLE8i的最令人激动的新特性 在你创建的使用ORACLE8i 数据库的应用程序中 你可以使用与JAVA有
  • 转载:图像噪声的成因分类与常见图像去噪算法简介

    本文转载自博客园博主淇淇宝贝 图像的空域噪声以及二维降噪算法介绍 1 图像噪声的成因 图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质 这对后续图像的处理和图像视觉效应将产生不利影响 噪声种类很多 比如 电噪声 机械噪声 信
  • YOLOv5:Profile、Timeout、WorkingDirectory上下文管理器 以及torch.cuda.synchronize()

    相关介绍 Python是一种跨平台的计算机程序设计语言 是一个高层次的结合了解释性 编译性 互动性和面向对象的脚本语言 最初被设计用于编写自动化脚本 shell 随着版本的不断更新和语言新功能的添加 越多被用于独立的 大型项目的开发 Pyt
  • 因果推断(三)——结构因果模型、干预、辛普森悖论

    主要内容 结构因果模型 干预 辛普森悖论 调整公式 结构因果模型 Structural Causal Model SCM 定义 结构因果模型被定义为一个有序三元组
  • jTable设置单个单元格颜色

    尝试Swing已经一星期 感觉Swing里的坑还是很多的 对于我这种刚入门的新手来说 接口确实有些不顺手 闲话休提 需求是这样的 绘制一个数据表格 假如其中某个单元格的数据超出阈值 该单元格标红 在Swing的库里简略地翻了一阵子的结果是
  • 《Thinking in java》笔记

    thinking in java 引发的思考 关于java面向对象的思考 抽象 并发 thinking in java中1 1抽象过程的描述 问题空间 gt 解空间的映射 所有问题最终都是列表 所有问题最终都是算法 面向对象 对象是现实世界
  • 向日葵win10控制Ubuntu失败怎么办

    服务器Ubuntu18 04 我的个人电脑win10 服务器端控制win10没问题 但是win10控制不了Ubuntu 这是因为向日葵在Ubuntu上没有开放xhost造成的 在Ubuntu的终端输入以下命令 sudo gedit etc
  • 曙光服务器重装系统centos7.9

    我的诉求是重装系统 清空所有 因此在划分磁盘的地方把以前的全部删了 朋友们谨慎参考 大致的思路就是 1 刻录一个带有新系统的U盘 系统可能和服务器硬件不兼容 因此建议搞俩系统 2 在服务器旁边 连接显示屏操作
  • python 实现自动上传文件到百度网盘(附程序源码及实现过程)

    把环境搭建完成之后就可以上传文件到自己的百度网盘中 环境搭建移步 环境准备 python3 6 firefox 最好是最新版 不然不会报错 Windows 7 框架搭建 selenium3 6 安装方法 pip install seleni
  • Windows下的socket编程

    前言 经过一周的时间 我又回来啦 这周我主要学习的是Windows下的socket网络编程 本篇博客的内容包括socket的简介 TCP IP协议的讲解 TCP socket编程实例 UDP socket编程实例以及相关类的封装 涉及到的知
  • 基类和派生类之间构造函数和析构函数的调用顺序

    笔者面试时 经常被问到基类和派生类之间构造函数和析构函数的调用顺序的问题 今天写个简单程序记录一下 include
  • python怎么换行输代码_python输代码怎么换行?

    python是一种计算机脚本语言 它语言简洁明了 实现也非常简单 但是有时对编写风格不是很熟悉的话 做起来也是不太方便 下面小编将带大家一起学习一下 在输入Python语句时如何换行 有朋友可能会想到 直接enter一下不就行了吗 但实际上
  • MMDeteceion V3版之系列一(环境安装、模型测试、训练以及模型后处理工具)

    1 MMDeteceion初识 MMDetection是一款优秀的基于PyTorch的深度学习目标检测工具箱 由香港中文大学 CUHK 多媒体实验室 mmlab 开发 基本上支持所有当前SOTA二阶段的目标检测算法 比如faster rcn
  • 如何使用multipart/form-data格式上传文件

    如何使用multipart form data格式上传文件 大家好 我是许飞 微软拼音的开发实习生 在网络编程中 经常用到从服务器上 下载 一些数据 有时却要向服务器 上传 数据 曾在一个原型中使用了 multipart form data
  • 【模型调参总结之解决模型过拟合方法】

    模型调参总结之解决模型过拟合方法 前言 在深度学习中对于过少的数据集 模型往往会产生过拟合现象 本文将对过拟合问题进行归纳和总结 并针对性的提出一点自己的见解 原因 由于数据集中图片数量较少 但模型训练次数扩大时 会导致模型对于训练集中图片
  • [1147]pandas中merge()函数的用法详解

    文章目录 merge 举例说明 merge import pandas as pd pd merge DateFrame1 DateFrame2 on how merge是pandas中用来合并数据的函数 不像concat是按照某行或某列来
  • 如何一键重装Win7系统 便捷重装Win7系统教程

    想要便捷又有效在线一键重装Win7系统 便捷重装Win7系统教程来了 Win7系统是很多用户喜欢使用的一款操作系统 具有速度快 稳定 兼容性好等特点 不管是办公还是玩游戏都是十分不错的选择 今天小编将为大家带来系统之家在线一键重装Win7系
  • Android 开发小贴士

    Android 开发小贴士 应用编译时报错 Unable to merge dex 可能原因 包引用重复 方法数超限或者几个库之间有重复代码块 特别是在整理module时容易犯 解决办法 app的build gradle 中 1 添加配置