Android从零单排之签名打包

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/46289803

签名介绍

什么是签名?

在现实生活中,签名就相当与合同上的签字和盖章。只有签名之后,才具有一定的效力。如果没有签名,“合同”就没有对象,也就没有法律效力了。


为什么要签名?

Android系统要求每一个应用程序必须经过数字签名才能安装到系统中,也就是说没有经过签名的app,是没有办法安装到你的android机器上的。

Android通过数字签名来标志应用程序和开发者之间的联系,它是对应用程序自我认证的一个方式。

说白了,就是为了标志一个APP的所属,区分APP。


签名的好处:

  • 程序升级带来方便。

    只有相同签名和相同包名的程序才能覆盖安装。

  • 应用程序模块化。

    android系统允许拥有同一个数字签名的程序运行在一个进程中,android程序会将他们视为同一个程序,所以可以将程序分模块开发,用户只需在需要的时候下载相应的模块即可。

  • 数据共享

    android提供了基于数字证书的权限赋予机制,应用程序可以喝其他程序共享一些数据给拥有相同签名的程序。

(最后两点好处,笔者暂时没有接触到。)


如何签名打包

对APK进行签名,有两种方式,分别是 1. 通过ADT提供的图形化界面签名打包2. 通过DOS命令来签名打包

首先需要说明的一下就是:我们一般调试程序,使用的都是debug签名(debug.keystore)。

一般我们开发应用程序的时候,都是多人协作的,每个人的机器的debug的签名都是不一样的,所以经常会遇到你写的程序提交之后,同事更新了之后就不能正常的运行。比如百度地图的相关代码逻辑,是与签名有很大联系的。使用debug签名会导致,某些代码只能在你自己的机器上运行,这样就太LOW了。

所以一般都是共用一个release签名

最终发布apk版本的时候,用的就是release版的签名,也就是正式版的签名。



下面,笔者对这两种方式都自己讲解一下:

通过图形化界面签名打包

项目右键,你会看到:Android Tools

Export Signed Application Package

表示导出带有签名的apk文件。

Export Unsigned Application Package

表示导出不带有签名的apk文件

我们选择第一项,然后next,

此时你可以选择使用已经存在的keystore,也可以自己创建一个keystore。

我们选择创建一个:

next之后,

在此界面需要填写一些签名的信息,比如:别名,签名密码,使用期限,组织信息等。

再次下一步,就是生成带有签名的apk文件了。

经过上面的一系列的步骤,就打包出来一个带有签名的apk文件。

下次再发布版本的时候,就可以使用已经生成的签名打包了。

next之后,如果你的签名文件密码是正确,会自动把你设置的别名列出来:

然后输入你的签名的密码,下一步,下一步就行了。


通过命令的方式签名打包

在使用命令的方式生成签名打包之前,我们先看一下debug.kestore都包括哪些信息。

使用如下命令,可以查看签名的信息:

keystool -list -v -keystore debug.keystore

debug签名的口令是: android

可以看到debug.keystore中包含的信息,与我们用图形化界面创建签名填写的信息基本对应。

我们对工程进行签名打包需要用到两个工具:keytooljarsigner

  • keytool:用于生成数字签名。

    keytool不仅可以用来查看签名信息,也可以用来生成一个签名,该工具位于jdk的bin目录下。

生成签名的命令如下:

keytool -genkey -v -keystore xxx.keystore -alias xxx -keyalg RSA -validity xxx
  1. -getkey 表示生成数字签名 -v表示将签名的信息显示在dos窗口中
  2. -keystore xxx 表示要生成签名的名称
  3. -alias xxx 表示签名的别名
  4. -keyalg RSA 表示生成密钥采用的是RSA算法
  5. -validity xxx 表示签名的有效期

执行这条命令之后,会提示你输入一些信息:

  • jarsigner: 使用签名给apk文件签名。该用具也位于jdk的bin目录中。

    使用命令编译出一个apk文件,很繁琐,得不偿失。我们使用图形化界面来打包出一个不带签名的apk。

使用如下命令对此apk进行签名

jarsigner -verbose -keystore xxx.keystore -signedjar xxx.apk xxx.apk xxx
  1. -verbose 表示将签名过程中的信息输出到dos上显示。
  2. -keystore xxx 表示所使用签名的地址
  3. -signedjar xxx1 xxx2 表示将xxx2签名成xxx1,xxx1是经过签名的apk文件名称。(注意顺序)
  4. 最后一个xxx表示签名的别名。(没有命令貌似不能执行)

执行此命令之后,稍微等待一会,就会提示你打包成功。

笔者在研究签名打包的过程中,在网上看到还有一个步骤,就是使用zipalign命令对apk进行优化。

zipalign -v 4 xxx.apk xxx_aligned.apk

命令的意思就是把xxx.apk优化成为xxx_aligned.apk。针对项目比较庞大的时候,使用此命令有较大的明显,比较小的项目优化效果不是很明显。

此命令解释如下(网络):

zipalign能够是apk文件未压缩的数据在4个字节边界上对齐,这样android系统就可以使用mmap()函数读取文件,可以在读取资源文件上获取较高的性能。

总结

  • 签名不同的相同包结构的apk不能覆盖安装,在手机上安装的时候,会提示你签名冲突。在eclipse等开发工具上运行的时候,会做如下提示:

- 未经过签名的apk不能安装到手机上。在经过Export Unsigned Application Package步骤之后,eclipse就会给你提示:在发布程序之前,需要对程序签名处理



此篇blog到此结束~~

感谢大家支持!如有错误,请指出~~

谢谢~

时间: 2025-01-03 20:17:24

Android从零单排之签名打包的相关文章

Android从零单排之自动跟新

Android从零单排之自动跟新 转载请注明出处:http://blog.csdn.net/crazy1235/article/details/45584621 自动更新原理 当我们发布我们的应用程序的时候,肯定会想到后续版本的更新,那么该怎么对我们的程序进行更新呢? 更新APK的原理实际上就是比较程序中的AndroidManifest.xml中的versionCode进行对比,如果发现更高版本的code,则代表有新版本的程序发布,此时就可以对用户提示"请更新新版本". 友盟自动更新介

Android开发之给应用签名打包

Android开发之给应用签名打包 什么是签名打包? 在Android 系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个 permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应 用程序才能取得该权限.Android使用Java的数字证书相关的机制来 给apk加盖数字证书. Android系统要求每一个安装进系 统的应用程序都是经过数字

Android从零单排--1.0 写在开始

前言: 工作三年,做过C,C++,Android开发,最近呆的创业公司倒闭,北漂来求生,奈何Android工作经验只有半年,前前后后忙活了一个多月,才找到称心的工作(主要钱不到位),这里BS下那些只以年限来评价个人能力的公司. 转到Android也就半年,直接拿本书就上了,带领团队做了四个项目.之前基本上是需要用什么就查什么,基础知识实在太差,也一直想来个从零单排系列,却一直没有时间(有女朋友还玩什么电脑啊).今天是来北京工作第一个周末,闲的无聊,开始从零单排之旅. 单排路线图: 以前看到别人画

Android从零单排--1.2 开发环境搭建

目前主流的Android开发环境是Eclipse/Android Studio/Intellij IDEA + SDK, 然而随着Google宣布不再更新ADT,并且官网也去掉了集成Android开发环境的Eclipse下载链接,Android Studio势必会成为主流.笔者之前也一直使用Eclipse,从零单排系列将全部使用Android Studio开发. 1.JDK的安装与配置 step1:JDK下载并安装 step2:配置环境变量(网上教程较多,不再复述) 2.Android Stud

android 从零单排 第一期 按键显示helloworld

啦啦啦- 我是qscqesze 今天开始android的从零单排啦啦啦- 首先从最简单的开始 要求: 程序运行后,单击屏幕上的按键后可以显示一句话,如“Hello World!” 这是一个最基础最基础的东东啦,我就不怎么废话了 代码如下: //java文件 package com.example.helloworld; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import a

Android从零单排之免费短信验证

介绍 短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息验证支付等.短信验证利用短信验证码来注册会员,大大降低了非法注册,很大程度上提高了用户账户的安全性. 目前市面上已经有了很多提供短信验证的服务商,有收费的,也有免费的.如果是个人的开发者,用免费的是最划算的了!下面我就介绍一个免费的短信验证平台---Mob.com Mob平台提供的短信验证功能可以实现快速的验证和匹配通讯录好友功能,并且能为每个app每天提供10000条免费短信验证.很多开发者都想在自己的app中集成短信验证

Android从零单排--1.1 Android的发展和历史

1.Android发展简介 Android是由Audy Rubin创立的一个手机操作系统,后来被Google收购:从2007年11月5日发布第一个Android版本,到2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一. 截止到目前,Android已更新至6.0版本. 2.Android平台架构及特性 Android系统的底层建立在Linux系统上,该平台由操作系统.中间件.用户界面和应用软件四层组成,他采用一种被称为软件叠层(Software Stack)的方式构

Android从零单排之Adapter及其子类

Adapter--适配器,相信大家在开发中少不了用这个类或者它的子类.本人也在很多地方都用到,所以在这里总结一下. Adapter扮演了一个桥梁的角色,把AdapterView和数据源板绑定一起.AdapterView是什么呢?它其实就是一个view,只不过是一种需要在代码中动态设置内容的view,而不是像其他的button,imageview等组件一样,可以在xml文件中指定属性和显示的数据. 下面看一下Adapter和AdapterView的类图: 我们一般使用的AdapterView的子类

Android从零单排之获取ImageView的宽高为0?

问题描述 说起来我也够菜的!⊙﹏⊙b汗. 今天搞了一个关于图片的demo,想动态的改变一张图片的大小和margin值.但是在activity中获取imageview的宽度和高度的时候,总是0.哎,我tm就是搞不懂了,怎么能是0呢? <span style="white-space:pre"> </span>imageView1 = (ImageView) findViewById(R.id.id_img1); int width = imageView1.get