用命令行发布android程序
在开发android程序的过程中,我们使用ant debug和ant installd这两个命令就够了,不涉及到APK的签名。
但是在正式发布我们的Android程序时,需要对APK签名。ant release生成一个release版程序。
ant release在package这一步会生成一个未签名的apk:xxx-release-unsigned.apk。然后试图用ant.properties里面给出的keystore文件对这个apk签名,生成xxx-release.apk。如果ant.properties没有给出keystore,不会生成签名的apk。这时你运行ant installr就会失败,因为ant找不到xxx-release.apk。
解决方法有两种:(1)在ant.properties文件中设置key.store和key.alias,然后重新运行ant release和ant installr命令。(2)自己用命令对xxx-release-unsigned.apk签名和zipalign,生成xxx-release.apk,然后再运行ant installr。
不管用哪种方法,我们都要先准备好keystore文件。JDK提供了keytool程序,可以生成key.store文件。
keytool.exe -genkey -alias jollywing.android.keystore -keyalg RSA -validity 36500 -keystore android.keystore
- -genkey 表示要进行的动作是生成keystore.
- -alias 是这个keystore的别名。
- -keyalg 表示生成密钥对的算法。
- -validity 表示有效期,这里36500接近100年。
- -keystore 指定最终生成的keystore文件名。
运行命令,会提示输入密钥库口令。这个口令在给apk签名时还会问到。
然后会询问一些信息,你的姓名、你的组织、你所在的地区等。
最后还会询问key.alias的密钥口令,直接回车,表示使用和密钥库相同的口令。
命令运行成功,还会得到一个警告信息:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore android.keystore -destkeystore android.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
我们可以运行警告信息中的命令,把密钥库转换成标准格式。这一步可选。
然后我们可以签名了。两种方式,一种是用ant release命令签名,另一种是手动签名。
如果用ant release命令签名,我们把android.keystore放在工程根目录下,即和build.xml和ant.properties相同的目录。然后编辑ant.properties,增加以下内容。
key.store=android.keystore
key.alias=jollywing.android.keystore
key.store.password=<刚才设置的密钥库口令>
key.alias.password=<刚才设置的密钥库别名口令>
如果android.keysotre没放在工程根目录下,最好使用绝对路径指明keystore文件放在哪里。
然后ant release和ant installr就OK了。
最后再讲一下自己用命令对xxx-release-unsigned.apk进行签名。
使用jdk中的jarsigner命令(apk就是一个jar包文件)。
jarsigner -keystore <keystore文件的路径> <xxx-release-unsigned.apk的路径> 密钥库别名
命令运行后,xxx-release-unsigned.apk就是已经签名的了。
zipalign -v 4 <xxx-release-unsigned.apk的路径> <要生成的xxx-release.apk的路径>
zipalign命令放在android sdk的build-tools目录下。
好了,一个可以发布的apk新鲜出炉了,adb install <xxx-release.apk的路径>试试看吧。如果xxx-release.apk放在工程的bin目录下,也可以直接运行ant installr。
2017-11-25 周六
用命令行发布android程序的更多相关文章
- unity3d发布Android程序
unity3d是一个跨平台的游戏开发引擎,可以使用c#开发各种平台上的游戏,如windows,Mac,Android,windows phone,IOS,Flash等.下面说下如何将开发好的unity ...
- 命令行创建Android应用,生成签名,对APK包签名并编译运行
一.命令行创建Android应用 android create project -n HelloWorld -t android-22 -p HelloWorld1 -k org.crazyit.he ...
- [Android] 基于 Linux 命令行构建 Android 应用(七):自动化构建
本章将演示如何基于 Linux 命令行构建 Android 应用,在开始本章之前,希望你已经阅读之前几章内容. 本文环境为 RHEL Sandiego 32-bits,要基于 Linux CLI 构建 ...
- [Android] 基于 Linux 命令行构建 Android 应用(二):命令行管理项目
创建 Android 项目 在命令行创建 Android 项目需要用到 android 工具(该工具由 Android SDK 提供,位于 <sdk>/tools/ 目录下.).它能自动生 ...
- 命令行创建Android应用,命令行生成签名文件,命令行查看签名信息,对APK包签名并编译运行
一.命令行创建Android应用 android create project -n HelloWorld -t android-22 -p HelloWorld1 -k org.crazyit.he ...
- 一个使用命令行编译Android项目的工具类
一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...
- win10 uwp 使用 msbuild 命令行编译 UWP 程序
原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http:// ...
- 使用命令行编译Qt程序
code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...
- windos命令行下的程序编写
1.命令行下写程序. 写程序一定要用IDE?不,我还可以用记事本呢.呵呵,写程序一定要用记事本?? ———————————————— 命令行下输入copy con test.txt后回车可在相应目录下 ...
随机推荐
- windows常见数据类型
一,常见数据类型 WORD: 16位无符号整形数据 DWORD: 32位无符号整型数据(DWORD32) DWORD64: 64位 ...
- Ubuntu 16.04安装Eclipse
此篇为http://www.cnblogs.com/EasonJim/p/7139275.html的分支页. 前提:必须正确安装JDK和Tomcat. 下载: https://www.eclipse. ...
- BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- Sql Server 之 Merge
转载:http://blog.csdn.net/zmoneyz/article/details/38404111 现在我们来创建了两个表Person和UserLogin Person表如下: User ...
- 自学Zabbix4.2.1 Application介绍
自学Zabbix4.2.1 Application介绍 Applications应用程序是item的一个组.例如我们要监控MySQL,我们可以将所有和MySQL相关的item放到这个应用程序中.例如M ...
- eclipse中用maven创建web项目
上一节中完成了本地的maven环境搭建,在eclipse中怎么创建一个maven项目呢 一.eclipse中配置maven环境 eclipse版本4.3 1.打开菜单Help->Eclipse ...
- 【BZOJ1814】Ural 1519 Formula 1 (插头dp)
[BZOJ1814]Ural 1519 Formula 1 (插头dp) 题面 BZOJ Vjudge 题解 戳这里 上面那个链接里面写的非常好啦. 然后说几个点吧. 首先是关于为什么只需要考虑三进制 ...
- 软Raid50制作
=====创建Raid50的步骤====== 1.创建分区[root@localhost ~]# fdisk /dev/sdb[root@localhost ~]# fdisk /dev/sdc[ro ...
- 震惊!1MB == 1000KB??
稍微对电脑了解一点的同学可能都知道,电脑中的单位换算是: 1KB = 1024B 1MB = 1024KB 1GB = 1024MB ... 以前,我也是这么认为的.... 最近我在Linux解压某个 ...
- Android微信数据导出
在Nexus 5(Android 4.4)+WeChat 5.4,和Nexus 5(Android 5.0)+Wechat 6.0上测试可用. 获取加密的sqlite3数据库EnMicroMsg.db ...