Android应用程序签名相关的理论知识主要包括以下内容:
1. 什么是签名?
签名是指在纸上或别处写下自己的名字,或者说在某处打上一个标记作为自己的一种特有的标识。在计算机领域中,签名所起到的作用也是一致的。
2. 为什么要给Android应用程序签名?
Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中。Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系。这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
3. 为什么我开发的Android应用程序没有做什么签名也能在模拟器和手机上运行?
你没有给Android应用程序签名并不代表Android应用程序没有被签名。为了方便开发调试程序,ADT会自动使用debug密钥为应用程序签名。debug密钥是一个名为debug.keystore的文件。如果想拥有自己的签名,而不是让ADT帮我们签名的话,我们也需要有一个属于自己的密钥文件(*.keystore)。
4. Android应用程序签名步骤
准备工作:apk的签名工作可以通过两种方式来完成。第一种方式是使用Java Keytool工具进行签名;第二种方式是使用Android Studio进行签名。具体步骤可以参考相关资料。
请根据提供的内容完成内容重构,并保持段落结构:1)通过ADT提供的图形化界面完成apk签名;
2)完全通过DOS命令来完成apk签名。
我比较喜欢第2)种方式,所以下面将讲解如何通过命令的方式完成apk签名。
给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool、jarsigner和zipalign,下面是对这3个工具的简单介绍:
1)keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件;
2)jarsigner:使用数字证书给apk文件签名;
3)zipalign:对签名后的apk进行优化,提高与Android系统交互的效率(Android SDK1.6版本开始包含此工具)。
从这3个工具的作用也可以看出,这3个工具的使用顺序。通常我们自己所开发的所有应用程序,都是使用同样的签名,即使用同一个数字证书,这就意味着:如果你是第一次做Android应用程序签名,上面的3个工具都将用到;但如果你已经有数字证书了,以后再给其它apk签名时,只需要用到jarsigner和zipalign就可以完成。
为了方便使用上面3个命令,首先需要将上面3个工具所在路径添加到环境变量path中(我说的是为了方便使用,没有说必须要这么做)。怎么配置环境变量就不在此讲解了,这里需要说一下这3个工具默认所在的路径:
1)keytool:该工具位于jdk安装路径的bin目录下;
2)jarsigner:该工具位于jdk安装路径的bin目录下;
3)zipalign:该工具位于android-sdk-windows/tools/目录下。
不知道大家是否注意到keytool和jarsigner两个工具是jdk自带的,也就意味着生成数字证书和文件签名不是Android的专利;另外从字面上理解jarsigner也能猜得出该工具主要是用来给jar文件签名的。
2)生成未经签名的apk文件
既然我们要自己对apk进行签名,就不再需要ADT默认帮我们签名了。
如何得到一个未经签名的apk文件呢?
打开Eclipse,在Android工程名称上点击右键,依次选择“Android Tools” - “Export Unsigned Application Package ...”,然后选择一个存储位置保存即可。这样就得到了一个未经签名的apk文件。
3)使用keytool工具生成数字证书
要使用keytool工具生成数字证书,请按照以下步骤操作:
a. 打开命令提示符(DOS命令);
b. 输入以下命令并按回车键执行:keytool -genkey -alias my_alias -keyalg RSA -keysize 2048 -validity 10000 -keystore my_keystore.jks;
c. 按照提示输入密钥库密码、名字等信息;
d. 执行完毕后,会在当前目录下生成一个名为my_keystore.jks的数字证书文件。
keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000
说明:
1) keytool 是工具名称,-genkey 意味着执行的是生成数字证书操作,-v 表示将生成证书的详细信息打印出来,显示在 dos 窗口中;
2) -keystore liufeng.keystore 表示生成的数字证书的文件名为“liufeng.keystore”;
3) -alias liufeng.keystore 表示证书的别名为“liufeng.keystore”,当然可以不和上面的文件名一样;
4) -keyalg RSA 表示生成密钥文件所采用的算法为 RSA;
5) -validity 20000 表示该数字证书的有效期为 20000 天,意味着 20000 天之后该证书将失效。
在执行上面的命令生成数字证书文件时,会提示你输入一些信息,包括证书的密码。
使用 jarsigner 工具为 Android 应用程序签名:
```
jarsigner -verbose -keystore liufeng.keystore -signedjar notepad_signed.apk notepad.apk liufeng.keystore
```
说明:
1) jarsigner 是工具名称,-verbose 表示将签名过程中的详细信息打印出来,显示在 dos 窗口中;
2) -keystore liufeng.keystore 表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下;
3) -signedjar notepad_signed.apk notepad.apk 表示给 notepad.apk 文件签名,签名后的文件名称为 notepad_signed.apk;
4) 最后面的 liufeng.keystore 表示证书的别名,对应于生成数字证书时 -alias 参数后面的名称。
5) (非必须但建议这么做)使用 zipalign 工具优化已签名的 apk:
```
zipalign -v 4 notepad_signed.apk notepad_signed_aligned.apk
```
在Android开发中,我们通常会使用签名来对应用程序进行加密和许可。这不仅有助于保护我们的代码不被恶意篡改,还可以帮助我们在Google Play商店发布应用程序。然而,有时候我们需要对已经签署的应用程序进行优化,这时候我们可以使用签名工具来生成一个新的签名文件。本文将介绍如何使用签名工具对已签名文件进行优化,并生成一个新的签名文件。
首先,我们需要确保已经安装了签名工具。在Windows上,我们可以使用Microsoft Visual Studio自带的签名工具;在Mac上,我们可以使用Keychain Access应用程序。接下来,我们将介绍如何使用签名工具对已签名文件进行优化,并生成一个新的签名文件。
1. 打开签名工具(例如Microsoft Visual Studio中的“发布”窗口)。
2. 在签名工具中,选择“+”图标,然后选择“添加或更新密钥”。
3. 在弹出的对话框中,输入密钥库文件名(例如mykeystore.jks),密钥别名(例如mykey),密码(例如mypassword)以及密钥存储位置(例如桌面)。点击“确定”按钮。
4. 在签名工具中,选择要优化的已签名文件(例如notepad_signed.apk)。
5. 点击“优化”按钮,然后点击“确定”按钮。这将对已签名文件进行优化,并生成一个新的签名文件(例如notepad_signed_aligned.apk)。
6. 将新的签名文件(例如notepad_signed_aligned.apk)替换到原始的已签名文件(例如notepad_signed.apk)中。
现在,你已经成功地对已签名文件进行了优化,并生成了一个新的签名文件。请注意,这个过程不会影响原始已签名文件的功能。如果你需要在Google Play商店发布应用程序,请确保你的新版本使用新的签名文件。