[TOC]
# Android
## 签名的意义
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
## 预备知识
先了解两件事情:
Keytool 是一个有效的安全钥匙和证书的管理工具.
Android 要求所有的程序必须有签名,否则就不会安装该程序。
## 关闭调试信息
### 去掉console调试插件
进入APP项目,执行:
`cordova plugin rm org.apache.cordova.console //去掉console调试插件`
### Android 相关文件修改
更改APP目录下的platforms/android/AndroidManifest.xml文件
`<application android : debuggable = "true" android : hardwareAccelerated = "true" android : icon = "@drawable/icon" android : label = "@string/app_name" >`
把android:debuggable 改为false:
`<application android : debuggable = "false" android : hardwareAccelerated = "true" android : icon = "@drawable/icon" android : label = "@string/app_name" >`
使用Cordova生成发布版本
`cordova build --release android`
看到 Build Successful 说明构件成功,通过apk文件名可以看到现在的安装文件时未签名的unsigned。如果**需要发布到应用商店,我们需要进行签名并优化**。
## Android APK 手动打包流程
Android app 的打包流程大致分为**build , sign , align**三部分。
1. **build** 是构建 APK 的过程,分为 debug 和 release 两种。release 是发布到应用商店的版本。
2. **sign** 是为 APK 签名。不管是哪一种 APK 都必须经过数字签名后才能安装到设备上,签名需要对应的证书(keystore),大部分情况下 APK 都采用的自签名证书,就是自己生成证书然后给应用签名。
3. **align** 是压缩和优化的步骤,优化后会减少 app 运行时的内存开销。
debug 版本的的打包过程一般由开发工具(比如 Android Studio)自动完成的。
开发工具在构建时会自动生成证书然后签名,不需要我们操心。
而 release 版本则需要开发者自己生成证书文件。
Cordova 作为 hybrid app 的框架不像纯 Android 开发那么自动化,所以第一次打 release 包我们需要了解一下手动打包的过程。
## build
执行`cordova build android`命令。
默认是debug模式,会使用` debug.keystore` 来生成以下两个文件:
~~~
XXXX-debug.apk(signed, unaligned)
XXXX-debug-unaligned.apk(signed, aligned)
~~~
`debug.keystore`的位置:
~~~
win7 : C:\Users\Administrator\.android\
~~~
### sign
1. 首先需要先生成一个数字签名文件(keystore):
Java自带的keytool工具是个密钥和证书管理工具。
在JDK 1.4以后的版本中都包含了这一工具,它的位置为`<JAVA_HOME>\bin\keytool.exe`。
它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。
keytool 将密钥和证书储存在一个所谓的密钥仓库(keystore)中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥。
JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型(我所知道的共有5种,JKS, JCEKS, PKCS12, BKS,UBER)。
JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。
JCEKS在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDes)。
2. 然后我们就可以用下面的命令对 APK 签名了:
jarsigner是JDK中包含的用于JAR文件签名和验证的工具。
` jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore HelloWorld-release-unsigned.apk alias_name`
**注意**: alias_name与上面所的应该是一致的
### align
**最后一步**:在Android SDK中包含了一个工具名为Zipalign,它可以优化你的APK程序包,它首次被引入是在Android 1.6版本的SDK软件开发工具包中。我们都知道APK的MIME其实就是一个Zip压缩文件,通过Zipalign可以让你的应用程序运行更快,Android123猜测从原理上来讲应该是优化Zip文件的解压速度,毕竟这个工具的文件名为zip对齐。
在Android平台中,数据文件存储在apk文 件中,可以多进程的访问,如果你开发过Win32可能知道程序的粒度对齐问题,不错虽然不是PE格式的文件,在Zip中一样,资源的访问可以通过更好的对 其优化,而zipalign使用了4字节的边界对齐方式来影射内存,通过空间换时间的方式提高执行效率。
`zipalign -v 4 android-apk/android-release-unsigned.apk android-apk/cordova-demo.apk`
### 查看apk的签名
查看签名是否成功,可将签名后的文件,后缀名apk的改为zip,解压。
在该目录下,输入如下命令:
`keytool -printcert -file META-INF/CERT.RSA`
`META-INF/TEST.RSA` 根据自己的情况配置
输入命令行后,会出现类似下图信息
![查看apk的签名](https://box.kancloud.cn/188992205f3c7746b84e32dece45a767_1442x142.png)
## 发布到安卓市场
### 渠道:
百度(91,安卓市场),360,小米,腾讯,豌豆荚,华为,乐商店,机锋市场,木蚂蚁,应用汇,搜狗
http://app.baidu.com/apps
http://dev.360.cn/mod/developer/
http://dev.xiaomi.com/
http://open.qq.com/
http://developer.wandoujia.com/
http://zhushou.sogou.com/open/
http://dev.appchina.com/market/dev/index.action
http://open.lenovo.com/developer/
http://developer.huawei.com/consumer/cn/devunion/openPlatform/html/memberCenter.html#modifyApp#
http://dev.mumayi.com/
http://dev.gfan.com/
特别是360,360的先上传安装包,网上加固后下载安装包再签名再上传
### 需要的材料:
1. icon (256*256 512*512 1024*1024 且圆角和直角都有)
2. app截屏(480*800 4-8张)
3. 资质(软件著作证书 税务登记证 营业执照 组织机构代码证)
4. 身份证正反面
5. app的相关内容填写(均不得包含关键词,最,平台,什么的):一句话简介,应用简介,当前版本更新内容
## 附录:
### [获取Android签名打包keystore或者.jks文件的MD5](http://jingyan.baidu.com/article/75ab0bcbb3bf08d6864db2b0.html)
### 关于.jks与.keystore
签名文件在Android Studio中为.jks
在eclipse时为.keystore文件
### [证书格式转换](https://www.trustasia.com/tools/cert-converter.htm)
提供 PEM JKS PKCS12 3种证书格式相互转换
## **总结**
自从Cordova从4.0开始,涉及到cordova的项目,就**会自动去下载google推荐的Gradle(项目自动构建工具)来构建APK**。**所以我现在打包release版本的发布apk时,都是用 Gradle 配置自动打包!**
所以使用老方法无法生成带签名的APK,可按以下步骤解决:
1.生成JKS类型的证书(test.keystore,默认是jks),在命令行下执行:
签名方法参考如下:
1. 使用JDK的keytool工具,在当前目录下生成keystore文件
keytool -genkey -v -keystore lzwme-release-key.keystore -alias lzwme -keyalg RSA -validity 365
按照提示输入操作。输入参考:
![](http://lzw.me/wp-content/uploads/2014/06/keytool_genkey.jpg)
以下为参数整合,完整命令:
~~~
keytool -genkey -v -alias testAlias -keyalg RSA -keystore test.keystore dname “CN=xxx.net,OU=xxx,O=xxx,L=
beiijng,ST=beijing,C=china” -storepass * -keypass * -validity 36500
~~~
然后复制生成的 keystore 文件到目录 platforms/android/的目录下。
*其中参数-validity为证书有效天数,这里我们写的大些20000天。还有在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,最后需要记下来后面还要用。*
2.在项目/platforms/android目录下新建`release-signing.properties`文件,填入:
~~~
key.store=./gzichan_release.jks /*Xee:相对路径/test.keystore*/
key.store.password=yf**** /*签名密码*/
key.alias=XXXE手通
key.alias.password=yf****
~~~
3.命令行下执行` cordova build android –release`或者 `cordova build --release android`编译即可,在/platforms/android/build/outputs/apk下就会生成已签名的安装包android-release.apk。
我觉得一般情况使用 build.json 就足够了。有兴趣的可以看这个 [Cordova 官方教程](https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#setting-gradle-properties)
### 完整命令行操作:
~~~
cordova plugin rm cordova-plugin-console
ionic build android --release --prod --device -- --keystore="../android.keystore" --storePassword=android --alias=mykey --password=myKeyPassword
cd platforms
cd android
cd build
cd outputs
cd apk
zipalign -v 4 android-release.apk WanCheTT.apk
// 或者直接(将在项目的根目录下生存WanCheTT.apk)
zipalign -v 4 ./platforms/android/build/outputs/apk/android-release.apk WanCheTT.apk
~~~
# IOS with xcode
```
$ gulp build --env production
$ ionic build ios
```
open `platforms/ios/ProkectName.xcodeproj`
choose `Generic iOS Device` for `Set the active scheme`
click `Product > Archive`
Upload to App Store or Export(Save for Enterprise Deployment)
代码
## 参考
https://segmentfault.com/a/1190000005177715
[ionic云打包](https://segmentfault.com/a/1190000008076771)
- 前言
- 中文字体
- 移动Web适配方案
- !移动Web基础!
- 详解适配相关概念
- 移动开发之设计稿
- 移动适配方案(一)
- 移动适配方案(二)
- vw+rem 实现移动端布局
- 移动端适配之雪碧图(sprite)背景图片定位
- 适配 iPhoneX
- 前端开发实战
- 打造自己的前端开发流程(Gulp)
- flexible.js案例讲解
- viewport 与 flexible.js解读
- 图片与字体
- 踩过的坑
- 浏览器默认样式
- 300ms点击延迟和点击穿透
- ios css
- CSS 常见问题
- Ionic v1混合开发
- Native App、Web App 、Hybrid App?
- ionic项目结构
- 混淆加密
- 解决问题
- cordova
- 环境配置
- 打包发布
- 问题
- 移动前端开发优化
- Web开发之抓包
- ===web移动开发资源===
- H5组件框架
- 调试集合
- 简单h5调试
- whistle
- devtools-pro