在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序
本贴首发于:
http://xuekaiyuan.com/forum.php?mod=viewthread&tid=15


准备环境

本脚本依赖 p7zip,OpenJDK,PHP


代码说明

设置已编译的不包含网页的 APK 安装程序的路径

SOURCEAPK="./AxureViewer.apk"

设置网页的路径

SOURCEWWW="./www"

设置基础路径

BASEDIR="."

计算时间戳

DATETIME="$(/bin/date +%Y%m%d%H%M%S)"

设置工作路径

WORKINGDIR="${BASEDIR}/${DATETIME}"

创建临时文件夹

/bin/mkdir "${WORKINGDIR}"

复制已编译的不包含网页的 APK 安装程序到临时文件夹

cp "${SOURCEAPK}" "${WORKINGDIR}/source.apk"

解压缩已编译的不包含网页的 APK 安装程序到临时文件夹

/usr/local/bin/7za x -o"${WORKINGDIR}/source" "${WORKINGDIR}/source.apk"

删除临时文件中的签名信息

rm -r "${WORKINGDIR}/source/META-INF"

在临时文件夹中创建网页的路径

/bin/mkdir "${WORKINGDIR}/source/assets/www"

复制网页到临刊文件夹中网页的路径

cp -r "${SOURCEWWW}/"* "${WORKINGDIR}/source/assets/www"

自动修改文件名

/usr/local/php/bin/php ./rename.php "${WORKINGDIR}/source/assets/www"

压缩临时文件夹为未签名的 APK 安装程序

/usr/local/bin/7za a -tzip "${WORKINGDIR}/unsigned.apk" "${WORKINGDIR}/source/*"

在临时文件夹中生成一个签名用的密钥文件

/usr/bin/keytool -genkeypair -keystore "${WORKINGDIR}/keystore" -storepass "${DATETIME}" -dname "CN=${DATETIME}, OU=hpx-party.net, O=daonao.com, L=Beijing, L=Beijing, C=CN" -alias "${DATETIME}" -keypass "${DATETIME}"

使用密钥文件对未签名的 APK 安装程序签名生成已签名的 APK 安装程序

/usr/bin/jarsigner -keystore "${WORKINGDIR}/keystore" -storepass "${DATETIME}" -keypass "${DATETIME}" -digestalg SHA1 -signedjar "${WORKINGDIR}/signed.apk" "${WORKINGDIR}/unsigned.apk" "${DATETIME}

完整的程序代码如下

    SOURCEAPK="./AxureViewer.apk"
SOURCEWWW="./www"
BASEDIR="."
DATETIME="$(/bin/date +%Y%m%d%H%M%S)"
WORKINGDIR="${BASEDIR}/${DATETIME}"
/bin/mkdir "${WORKINGDIR}"
cp "${SOURCEAPK}" "${WORKINGDIR}/source.apk"
/usr/local/bin/7za x -o"${WORKINGDIR}/source" "${WORKINGDIR}/source.apk"
rm -r "${WORKINGDIR}/source/META-INF"
/bin/mkdir "${WORKINGDIR}/source/assets/www"
cp -r "${SOURCEWWW}/"* "${WORKINGDIR}/source/assets/www"
/usr/local/php/bin/php ./rename.php "${WORKINGDIR}/source/assets/www"
/usr/local/bin/7za a -tzip "${WORKINGDIR}/unsigned.apk" "${WORKINGDIR}/source/*"
/usr/bin/keytool -genkeypair -keystore "${WORKINGDIR}/keystore" -storepass "${DATETIME}" -dname "CN=${DATETIME}, OU=hpx-party.net, O=daonao.com, L=Beijing, L=Beijing, C=CN" -alias "${DATETIME}" -keypass "${DATETIME}"
/usr/bin/jarsigner -keystore "${WORKINGDIR}/keystore" -storepass "${DATETIME}" -keypass "${DATETIME}" -digestalg SHA1 -signedjar "${WORKINGDIR}/signed.apk" "${WORKINGDIR}/unsigned.apk" "${DATETIME}"

在虚拟机中的效果如图所示

在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序的更多相关文章

  1. 在 Linux 中自动配置 IPv6 地址

    在 Linux 中自动配置 IPv6 地址 在本文中,我们将学习如何为 ULA 自动配置 IP 地址. 何时使用唯一本地地址 唯一本地地址unique local addresses(ULA)使用 f ...

  2. Linux Makefile自动生成--config.h

    Linux Makefile自动生成--config.h http://blog.csdn.net/spch2008/article/details/12510805

  3. 在 Cordova/Phonegap for Android 中包含中文文件名的页面

    在 Cordova/Phonegap for Android 中包含中文文件名的页面 本贴首发于: http://xuekaiyuan.com/forum.php?mod=viewthread& ...

  4. IntelliJ IDEA 中自动生成 serialVersionUID 的方法

    as, idea plugin中搜如下关键字,并安装该插件: GenerateSerialVersionUID 如上图所示,创建一个类并实现Serializable接口,然后按alt+Enter键,即 ...

  5. 在PowerDesigner中自动生成sqlserver字段备注

    在PowerDesigner中自动生成sqlserver字段备注 PowerDesigner是数据库设计人员常用的设计工具,但其自生默认生成的代码并不会生成sqlserver数据库的字段备注说明.在生 ...

  6. 二十四、详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法

    当我们用 IntelliJ IDEA 编写类并实现 Serializable(序列化)接口的时候,可能会遇到这样一个问题,那就是: 无法自动生成serialVersionUID. 而serialVer ...

  7. eclipse中自动生成注释

    eclipse中自动生成注释 包前缀设置的地方 注释模板设置的地方 Eclipse自动生成方法注释 快捷键 自动生成方法的注释格式,例如 /*** @param str* @return* @thro ...

  8. Eclipse中自动生成get/set时携带注释给get/set

    Eclipse中自动生成get/set时携带注释给get/set   编码的时候通常要用到 JavaBean ,而在我们经常把注释写在字段上面,但生成的Get/Set方法不会生成,通过修改Eclips ...

  9. 从JSON中自动生成对应的对象模型

    编程的乐趣和挑战之一,就是将体力活自动化,使效率成十倍百倍的增长. 需求 做一个项目,需要返回一个很大的 JSON 串,有很多很多很多字段,有好几层嵌套.前端同学给了一个 JSON 串,需要从这个 J ...

随机推荐

  1. VMware Workstation 无法与 Windows XP \ Windows 7 \ Windows 8 进行共享文件夹。

    1.这是一个小Bug,做法很简单. ----①.如果安装了VMware Tools,先卸载VMware Tools,重启虚拟机,再安装VMware Tools,重启虚拟机,就行了. ----②.如果没 ...

  2. JSON解析之Json-lib

    1.Json-lib介绍 Json-lib是一个java类库,它用于把beans, maps, collections, java arrays and XML 传递给一个Json,或者返回来把Jso ...

  3. 如何把va_list可变参数传送到下一级函数中(如传送到printf)

    最近我在一个LCD上想实现打印格式化字符串的功能,实现这样的功能可有两种方式: 一 最直接的就是自己去解析类似于printf功能的一个函数: 二 比较简单的方法是使用已有的sprintf功能,把格式化 ...

  4. [tarjan] hdu 3836 Equivalent Sets

    主题链接: http://acm.hdu.edu.cn/showproblem.php? pid=3836 Equivalent Sets Time Limit: 12000/4000 MS (Jav ...

  5. IE通过推理IE陈述的版本号

    样例: 1. <!--[if !IE]> 除IE外都可识别 <![endif]--> 2. <!--[if IE]> 全部的IE可识别 <![endif]-- ...

  6. Android项目---ActivityGroup的使用

    ActivityGroup在一年前已经被说明不用了,但是腾讯QQ,新浪微博上也不乏ActivityGroup的身影.所以,即使是过时的东西,也有学习的必要,当然项目中也是可以添加的.在网上找了一个博客 ...

  7. 在Android中自动实现横竖屏切换的问题

    http://developer.android.com/training/basics/supporting-devices/screens.html参照Google推荐的做法 在你项目的res 文 ...

  8. QTP中DataTable操作大全

    序曲 假设现在有一个Excel文件:D:\data.xls,里面的具体内容如下:有两个Sheet,第一个叫Login,第二个叫InsertOrder: 当前QTP的Test中有两个Action:Log ...

  9. hibernate配置jndi

    tomcat里的conf->context.xml <Resource name="mysql"     auth="Container" type ...

  10. Akka入门实例

    Akka入门实例 Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用. Actor模型并非什么新鲜事物,它由Carl Hew ...