安卓应用签名 - CSDN
精华内容
参与话题
  • Android 签名打包

    千次阅读 2018-06-05 11:37:11
    Android 要求所有已安装的应用程序都使用数字证书做数字签名,数字证书的私钥由开发者持有。Android 使用证书作为标识应用程序作者的一种方式,证书不需要由证书认证中心签名,使用自制签名证书。Android 系统不会...


    什么是签名?

    Android 要求所有已安装的应用程序都使用数字证书做数字签名,数字证书的私钥由开发者持有。

    Android 使用证书作为标识应用程序作者的一种方式,证书不需要由证书认证中心签名,使用自制签名证书。

    Android 系统不会安装或运行没有正确签名的应用,此规则适用于任何地方运行的Android系统。因此在真机或模拟器上运行或者调试应用前,必须为其设置好签名。

    两种签名:

    1、调试模式下签名   (sdk 为应用主动生成一个签名证书,调试模式下签名的应用不能对外发布,因为由构建工具创建的证书是不安全的,应用商店不接受调试证书签名的apk)

    2、公布模式下签名 (需要生成自己的证书)

    注:给自己开发的app签名,就代表着我们自己的版权,之后要进行升级,也必须要使用相同的签名才可以,签名代表着自己的身份(即 keystore,是一个包括私人秘钥集合的二进制文件),创建的keystore 多个app可以使用同一签名。


    为什么要有签名?

    开发Android的人众多,完全有可能把雷鸣、包名命名成相同的名字,需要签名来区分,由于开发商可能通过使用相同包名来混淆替换已经安装的程序,签名可以保证相同名字,但是签名不同的包不被替换。

    签名机制在Android应用和框架中有着十分重要的作用,例如:Android系统禁止跟新安装签名不一致的apk,若应用需要使用system权限,必须保证apk签名与framwork签名一致。


    为什么要这么做?

    •  应用程序升级 -  当发布应用的更新时,如果想染给用户无缝的升级到新版本,需要继续使用相同的某个或某套证书来签名更新包,当系统安装应用的更新时,它会比较现在的版本和新版本的证书,如果证书吻合,包括证书数据和顺序都吻合,那么系统允许更新,如果新版本所做的签名不是匹配的,那么将需要给用起一个不同的包名 - 在这种情况下,用户相当于安装了一个完全新的程序。
    • 用用程序模块化 - Android允许相同证书签名的应用程序运行在相同的进程中,此时系统会将它们作为耽搁应用程序对待,在这种方式中,可以按模块化的凡事部署应用,用户可以根据需要独立的跟新每一个模块。
    • 代码、数据的授权共享 - Android提供模式匹配的权限控制机制,因此一个应用可以暴露功能给另一个用指定证书签名的签名的应用,通过用相同证书签名多个应用,以及使用模式匹配的权限检查,应用程序可以以安全的方式共享代码和数据。


    公钥和私钥的概念

    在现代密码体制中加密和解密是采用不同的秘钥(公开秘钥),也就是公开秘钥算法(也叫非对称算法、双钥算法),每个通信方均需要两个秘钥,即公钥和私钥,这两个秘钥可以互为加解密,公钥是公开的,不要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密的。


    证书的概念

    数字证书是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的,实际上数字证书就是经过CA认证的公钥。

    原则:

    • 一个公钥对应一个私钥
    • 秘钥对中,让大家都知道的是公钥,不告诉大家只有自己知道的是私钥
    • 如果用其中一个秘钥可以解密,那么该数据必须是对应的秘钥进行的加密
    • 非对称秘钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的

    例:两个用户 A 和 B ,A要把一段明文通过双钥加密的技术发送给 B , B有一对公钥和私钥,那么加密解密过程如下

        1. B 将他的公钥传送给A

        2. A 用 B 的公钥加密的他的消息,然后传送给 B

        3. B 用他的私钥解密 A 的消息


    调试版相关问题

    证书到期问题:用来签署apk调试的自签名证书有效期365天,到期后只需删除该debug.keystore文件。

    文件存储位置 --- OS 和 Linux 系统:~/.android /

                         --- windows 7, 8, 10 : C:\Users\<user>\.android\


    发布版的签名

    1. 手动生成签名的 apk (使用 Android Studio 手动生成签名的 apk,每次发布不同版本的时候都需要手动生成一次,比较麻烦)

    步骤如下:

        1> 在Android Studio菜单栏中,Build --> Generate Signed APK

            

        2>如果你已经有一个秘钥库,请转到步骤4,如果你想创建一个新的秘钥库,单击新建

            

        注:Key store path: 秘钥库存储位置

               Key store password:秘钥库安全密码

               Key alias:秘钥标识名称

               Key password: 秘钥安全密码

               秘钥安全密码应当与秘钥库安全密码不同


        3>创建新的秘钥库如下图

             

        

        注:秘钥的有效时间设置以年为单位,应至少为25年,以便您可以在应用的整个生命周期内使用相同的秘钥签署应用更新

        Certificate 部分是为证书输入关于您自己的信息,此信息不会显示在应用中,但会作为apk的一部分包含在您的证书中

        Firstand Last Name 秘钥颁发者姓名

        OrganizationalUnit 秘钥颁发者组织单位

        Organization 组织

        Cityor Locality 城市

        State or Province 市或洲

        CountryCodeXX 国家代码


        4>在生成签名apk窗口中,选择秘钥库、秘钥,并输入两个密码(如果是新创秘钥,这些字段会自动填充)然后单击xiayi

        

        


        5>选择签署的apk目的地,构建类型,产品风味,单击完成


        

        

        APK Destination Folder 为签署的APK选择一个目的地


        Build Type 选择构建的类型(两种类型调试和正式


        Flavors 选择产品风味(即我们平时所说的发布平台,Android将为选择的每个产品风味生成单独的apk

        Signature Versions 签名版本勾选 Android7.0中引入了APKSignature Scheme v2

        

        说明:v1:应用是通过zip条目进行验证,这样apk签署后可进行许多修改 - 可以移动甚至重新压缩文件

        v2:验证压缩文件的所有字节,而不是单个zip条目,签名后无法再更改


    2. 配置 build.gradle 文件自动签名apk

    步骤如下:

        1>Android Studio 菜单栏 File --> Project Structure ( 快捷键 ctrl+alt +shift +s)

        2>选中app这个module,然后切换到singning标签栏,然后点击添加,生成release签名信息,点击ok

        

        3>切换到Build Types 标签,将Signing config 选为“release”,即将刚刚生成的release签名信息配置进去

        

        

        4>随后我们可以看到app这个module的build.gradle文件多出了如下部分代码

          


        5>然后执行菜单栏的“build --> clean Project”



    6>生成release版本的apk,在命令行terminal输入gradlew assembleRelease (AS已经将命令行Terminal 继承到了软件当中)运行成功的话,效果如下:



    7> 生成签名好的文件在如下位置:




    展开全文
  • 安卓APP应用签名不一致无法安装的解决方案

    万次阅读 热门讨论 2018-03-31 23:04:50
    教程链接https://mp.weixin.qq.com/s/tH_6ndQkYeWwIIegNPpOeQ最近安装公司开发的app时,突然提示应用签名冲突,无法安装程序,请先卸载旧版本后安装,这时候怎么办呢, 按照提示做,然鹅,当我卸载了所有开发测试版...

    教程链接

    https://mp.weixin.qq.com/s/tH_6ndQkYeWwIIegNPpOeQ

    最近安装公司开发的app时,突然提示应用签名冲突,无法安装程序,请先卸载旧版本后安装,这时候怎么办呢, 按照提示做,然鹅,当我卸载了所有开发测试版,以及正式版的app后之后依然安装不上,那肿么办呢,分析原因,想办法解决,哈哈。

        安装app时 ,提示签名冲突一般是以下几个原因导致的:

    原因1:

        手机上存在旧版本的app,新旧版版本签名冲突

    解决方案:

        01.卸载旧版本的app后,重新安装你要安装的app

        02.如果卸载旧版本后依然安装不上,检查以下是否有应用残留文件夹,删除相应文件夹后重新安装

        03.如果依然安装不上,请看原因2及解决方案2

    原因2:

        应用卸载不彻底

    解决方案:

        这种情况的表现是,你的手机上已经没有和你安装的app的类似应用了(这里的类似,是指你app的开发以及测试版的一系列版本),同时,你也已经删除了相关的应用文件夹,这种情况是由于应用卸载不彻底导致的,解决方案如下:

    前提:手机需要通过数据线连接电脑,处于传输文件,开发者模式的打开状态

    01.下载adb和aapt并配置  

      下载两个工具,adb和aapt,下载链接(https://download.csdn.net/download/learning_lb/10320312

    下载完成后解压文件夹,并在环境变量中配置



    02.查看你的apk的包名

    aapt dump badging <file_path.apk>


    03.执行卸载命令

    adb uninstall apk的包名

    提示,success即为卸载成功

    04.重新安装app即可



    展开全文
  • 安卓应用签名那些事

    千次阅读 2018-08-29 18:19:45
    安卓应用签名平常不怎么使用,容易遗忘,特记录下来。有些文章讲的很多,但觉的不够清晰,没能指出几种方式的异同,何时使用何种方式,下面说说我自己的理解。 为什么应用需要签名? Android应用以它的包名作为...

    安卓应用签名平常不怎么使用,容易遗忘,特记录下来。有些文章讲的很多,但觉的不够清晰,没能指出几种方式的异同,何时使用何种方式,下面说说我自己的理解。


    为什么应用需要签名?

    Android应用以它的包名作为唯一标识。如果在同一部手机上安装两个包名相同的应用,后面安装的应用就会覆盖前面安装的应用。为了避免这种情况的发生,Android要求对作为产品发布的应用进行签名。比如此时有两个包名一样的应用,但是签名不同,后进行安装的应用会无法进行安装(除非卸载前者),如果两个应用包名和签名都一致,那么后者会对前者进行覆盖。

    如何进行签名?

    我们知道安卓studio打包应用有两种模式:1.debug,2.release。

    平时在开发调试阶段,都是运行在debug模式,此时默认签名在:C:\Users\<用户名>\.Android\debug.keystore,如果不存在Android studio会自动创建它。默认信息如下:

    debug签名我们不需要管它,但是当我们自己上线应用时就必须有自己的release签名了。

    1.首先创建一个签名

     

     

    点击OK后,一路next,直到图4的Finish

    Finish之后,会在app文件夹下生成release文件夹,release文件夹中既是刚签名的apk文件

    以上是在生成签名文件的同时,直接生成了签名过后的apk文件,也算是签名的一种方式,但更重要的是生成了签名文件。

    2.签名的第二种方式(这才是真正的方式)

    打开project Structure面板,创建两个签名配置,见标识②,需要指定刚创建的签名文件的路径,然后点开BuildTypes,

    主要是Signing Config选项,release一般对应于release配置,debug对应于debug配置,但在开发调试某些第三方API时,必须使用release签名,这时就可以将debug的Signing Config设置成release,方便我们调试

    点击OK后,会在app的build文件中生成如下代码:

    signingConfigs {
            release {
                keyAlias 'key0'
                keyPassword '123456'
                storeFile file('E:/my_demo_workspace/TakePhotoDemo/keystore.jks')
                storePassword '123456'
            }
            debug {
            }
        }
    
     buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.release  // 签名新生成的代码
            }
            debug {
                signingConfig signingConfigs.debug // 签名新生成的代码
            }
        }

    所以,你也可以直接手写这些代码。

    当然,为了提高安全性,我们还可以把那四个属性作为变量配置在主工程的gradle.propreties,然后在build.gradle引用变量就可以了。如下:

    接下来是进行打包:

    看上图,选择assembleRelease,即打release包,生成文件目录见下图:

     在app>>build>>outputs>>apk下,可以看到dubug文件夹和release文件夹,既是对应的debug和release apk版本,如果release版本没签名,会显示app-release-unsigned文件名。这样打release包就方便多了。

    3.如何直接在调试的时候运行release包?

    首先要知道release包和release签名是两个不同的概念,不要搞混了。见下图:

    在build的时候直接release模式构建,然后直接点击运行就可以了。当我们构建多个渠道版本进行调试的时候,也是在这里选择不同的渠道进行调试的。需要注意的一点:如果一个项目有多个module,主module可以选择debug或者是release,编译时被依赖的 Module 默认会提供 Release 版给其他 Module 或工程使用,如果你在依赖的module中使用BuildConfig.Debug判断输出log会出现问题。解决办法参见:https://blog.csdn.net/j236027367/article/details/78751281

     

     

     

    展开全文
  • Android 获得app的应用签名

    千次阅读 2019-01-21 17:21:14
    创建应用,这里会需要用到APP的应用包名和应用签名需要开发者提供。 应用包名就不提了,应用签名的三种获取方式 1、AndroidStudio选择最右边的Gradle标签,选择你要取签名的项目,点击 signingReport 这个 Task...

    在项目中难免会用到微信功能,比如分享微信好友、朋友圈,微信支付功能,需要我们在微信开放平台https://open.weixin.qq.com/

    创建应用,这里会需要用到APP的应用包名和应用签名需要开发者提供。

    应用包名就不提了,应用签名的三种获取方式

    1、AndroidStudio选择最右边的Gradle标签,选择你要取签名的项目,点击 signingReport 这个 Task,双击运行

     然后在控制台就可以看到你想要的MD5了

    2、通过代码获得,直接上代码。

    /**
     * 获取app的MD5值
     * @return
     */
    public String getSignMd5Str() {
        try {
            PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            Signature[] signs = packageInfo.signatures;
            Signature sign = signs[0];
            String signStr = encryptionMD5(sign.toByteArray());
            return signStr;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * MD5加密
     * @param byteStr 需要加密的内容
     * @return 返回 byteStr的md5值
     */
    public static String encryptionMD5(byte[] byteStr) {
        MessageDigest messageDigest = null;
        StringBuffer md5StrBuff = new StringBuffer();
        try {
            messageDigest = MessageDigest.getInstance("MD5");
            messageDigest.reset();
            messageDigest.update(byteStr);
            byte[] byteArray = messageDigest.digest();
            for (int i = 0; i < byteArray.length; i++) {
                if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
                    md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
                } else {
                    md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
                }
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return md5StrBuff.toString();
    }

    就这样了,只需要在你需要的时候调用该方法就可以了

    private void initView() {
        String signMd5Str = getSignMd5Str();
        LogUtils.toE(signMd5Str);
    }
    

    3、还有最简单的方式就是,在微信平台下载生成应用签名的工具,看图示了。

    这里就可以找到签名生成工具了。

     

    展开全文
  • 安卓应用签名校验

    千次阅读 2019-01-02 19:44:49
     安卓应用程序,使用apkTool.jar,或其他反编译工具很容易被篡改。  为了保证应用程序未被别人修改过,可以在应用中添加签名信息校验逻辑。(当应用被反编译再重新打包后,签名信息无法与我们使用的签名保持一致...
  • Android 应用签名

    2019-06-11 22:39:34
    Android 应用签名是应用打包过程的重要步骤之一,Google 要求所有的应用必须被签名才可以安装到 Android 操作系统中。Android 的签名机制也为开发者识别和更新自己应用提供了方便。 数字摘要 Digital Digest 数字...
  • Android APP的签名

    千次阅读 2018-09-01 18:17:14
    Android APP的签名 Android项目以它的包名作为唯一的标识,如果在同一部手机上安装两个包名相同的APP,后者就会覆盖前面安装的应用。为了避免Android APP被随意覆盖,Android要求对APP进行签名。下面介绍对APP进行...
  • Android应用签名获取工具,解压缩后内为APK文件,输入目标包名获取应用签名,方便快捷。希望能帮助到大家
  • 微信开放平台Android应用签名的本质及如何获取

    万次阅读 多人点赞 2017-03-10 19:30:01
    在微信开放平台创建移动应用时上图大家都遇到过,这里的应用签名是什么呢? 这里介绍说可以通过签名生成工具在已安装当前应用的手机中获取,(待会获取测试一下)我们先搞明白它是什么,这里提到了该应用签名由开发者签名...
  • 查看Android应用签名信息

    万次阅读 2014-12-03 17:58:58
    本文档介绍在Android下如何查看自己的应用签名及三方APK或系统APK签名信息,包含其中的MD5、SHA1、SHA256值和签名算法等信息。 1、查看自己的应用签名 可以通过两种方式查看 (1) 通过Eclipse查看默认的...
  • Android应用签名及包名的获取

    千次阅读 2019-05-08 12:36:33
    Android应用签名及包名的获取
  • 1、首先下载安装安卓应用签名获取的APK https://share.weiyun.com/55MsELw 2、找到需要获取的那个APP进去查看复制(需要获取应用签名的APP要先安装到手机) 像微信那边的就是需要证书指纹(MD5)这个值,...
  • Android 应用签名是应用打包过程的重要步骤之一,Google 要求所有的应用必须被签名才可以安装到 Android 操作系统中。Android 的签名机制也为开发者识别和更新自己应用提供了方便。本文尝试对 Android 应用签名机制...
  • 1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用...
  • android应用签名

    2017-07-27 16:24:47
    Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行时到手机上时,是AS会自动用默认的密钥和证书来进行签名;但是我们实际发布编译时,则不会自动签名,这...
  • 1. 查看 APK 文件的签名 使用解压工具解压 APK 文件,在 META-INF 文件夹拿到 CERT.RSA 文件。 假设 CERT.RSA 文件的路径是 D:\GetOn\ceshi\release\CERT.RSA 在 CMD 中输入 keytool -printcert -file D:\GetOn\...
  • 应用签名创建的步骤 1.
  • 拿到开发给的文件: 查询keystore的MD5 可以在运行窗口,定位到keystore所在的路径,执行下面这条语句后就能显示Key的所有信息 keytool -list -v -keystore xxx.jks 从...
  • 要想使Android应用程序在真机上运行,需要对apk文件进行签名,可以通过命令行或ADT插件方式对apk文件进行签名 一、使用命令行方式生成签名 开始”=> “运行”=> 输入“cmd”回车,进入命令行窗口,在命令行...
  • android获取应用32位签名

    热门讨论 2020-07-30 23:33:35
    获取android应用签名的方法网上很多,但基本都是很长一串,需要转换成32为的签名才是大家想要的
1 2 3 4 5 ... 20
收藏数 52,716
精华内容 21,086
热门标签
关键字:

安卓应用签名