之前在一个网站上见到这么一个功能:输入一个网址,这个网站会自动生成一个以该网址为首页的单webview的应用的安装包给你。自己试着捣鼓了一下,实现出来了,在这里分享一下。
基本原理是先安装好android studio的开发环境,打包用到的工具都是用现成的,然后建立一个基本的android单webview应用的项目,就是那种一打开就显示一个webview的简单项目,将这个项目作为模板项目。然后在这个项目的build.gradle中定义一个task,这个task能够接收命令行传入的参数如网址、app名称等,然后根据这些参数修改模板项目,最后自动生成证书证书,并打包生成安装包。
实现并不难,涉及了gradle和groove的知识,下面介绍一下。
项目源码 https://github.com/eeeyuerrrr/AutoGenApk ,可结合源码了解。
一、 模板项目
这个模板项目是个简单的单WebView应用,打开后显示启动图片n秒,然后就是一个Webview。项目中的app名字、图标、启动图、web网址等value写在res/value文件中,比如自己创建的一个config_args.xml。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">mAppName</string>
<string name="web_home_url">http://www.sina.com</string>
<drawable name="app_launcher">@mipmap/m_app_launcher</drawable>
<drawable name="splash_img">@mipmap/m_splash_img</drawable>
</resources>
为了自动生成证书,在app module的 build.gradle中跟证书有关的参数写成从keystore_info.xml文件中读取,这个keystore_info .xml文件 是自己创建的,里面保存了跟证书有关的信息。
build.gralde
//从keystore_info.xml读取签名文件的信息
def keystoreFile = rootProject.file("keystore_info.xml")
def signInfo = new XmlParser().parse(keystoreFile)
android {
...
// 签名
signingConfigs {
release {
// 证书文件
storeFile file( signInfo.storeFile.text() )
// 证书库的密码
storePassword signInfo.storePassword.text()
// 证书密码
keyPassword signInfo.keyPassword.text()
// 别名
keyAlias signInfo.keyAlias.text()
}
}
...
}
keystore_i