原生app的开发成本和网页相比相对较高,所以越来越多的app使用网页来作为界面,甚至完全将一个网站封装成app,可以提高开发速度,还能基本实现跨平台。

下面以Android为例,在ubuntu-14.04.4-desktop-amd64环境实现一个简单的WebView封装网站成app的过程。

环境准备

开发环境需要Java SDK(官网下载),Android SDK(官网下载)。

Java SDK安装

wget http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.tar.gz
tar -x -f jdk-8u91-linux-x64.tar.gz

然后配置PATH路径及JAVA_HOME

vi ~/.bashrc

在最后添加

export JAVA_HOME=JDK解压目录
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

保存退出vi,刷新配置

source ~/.bashrc

Android SDK安装

ps:安装过程中可能需要梯子,请自备。

wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar -x -f android-sdk_r24.4.1-linux.tgz
cd android-sdk-linux/tools

先看一下有哪些sdk版本可以安装

./android list sdk

然后安装需要的sdk版本

./android update sdk --no-ui --filter 用逗号分隔需要安装的序号

项目建立及代码编写

在任意地方新建一个目录,保存这个项目,然后新建一个src目录,用于存放源文件。因为Java有包的概念,所以进入src目录后,根据包名的层次,依次建立相应目录,然后新建Java源程序文件,比如:

 package test.android;

 import android.app.Activity;
import android.os.Bundle;
// import android.app.AlertDialog;
import android.view.Window;
// import android.view.WindowManager;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
//import android.webkit.WebChromeClient;
// import android.webkit.JsResult;
// import android.content.DialogInterface;
// import android.content.DialogInterface.OnClickListener; public class Main extends Activity {
public static final String LOAD_URL = "http://www.baidu.com/"; private WebView webView = null; public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); webView = new WebView(this);
this.setContentView(webView);
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
//webView.evaluateJavascript("test();", null);
}
});
/*
webView.setWebChromeClient(new WebChromeClient() {
public boolean onJsAlert(WebView view, String url, String message, JsResult result) { new AlertDialog.Builder(_this)
.setMessage(message)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {}
}).show(); return true;
}
});
*/
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(this, "native");
webView.loadUrl(LOAD_URL);
} // overwrite back button
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (KeyEvent.KEYCODE_BACK == keyCode && webView.canGoBack()) {
webView.goBack();
return true;
} return super.onKeyDown(keyCode, event);
} }

将文件保存为Main.java

回到项目根目录,新建另一个文件,保存为AndroidManifest.xml,内容如下:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.android">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> <uses-permission android:name="android.permission.INTERNET" /> </manifest>

在项目根目录新建res目录,在res内新建drawable和values目录。

在values内新建xml文件strings.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">网页打包</string>
<string name="web_url">http://www.baidu.com</string>
</resources>

然后将需要的程序图标拷入drawable目录,文件名为icon.png

演示示例可以从这里下载

编译

先切换到项目目录。

首先要编译资源,在项目根目录创建gen目录,保存生成的R.java资源编号,在控制台输入以下命令:

/opt/android-sdk-linux/build-tools/24.0./aapt package -f -m -J gen -S res -I /opt/android-sdk-linux/platforms/android-/android.jar -M AndroidManifest.xml

编译java源文件时,加入R.java源文件:

javac -encoding utf-8 -source 1.6 -target 1.6 -bootclasspath /opt/android-sdk-linux/platforms/android-24/android.jar -d bin/classes src/test/android/Main.java gen/test/android/R.java

将编译好的文件打包成dex格式

/opt/android-sdk-linux/build-tools/24.0.0/dx --dex --output=bin/classes.dex bin/classes

将资源文件打包

/opt/android-sdk-linux/build-tools/24.0.0/aapt package -f -M AndroidManifest.xml -S res -I /opt/android-sdk-linux/platforms/android-24/android.jar -F bin/main.ap_

将所有文件打包成apk

java -classpath /opt/android-sdk-linux/tools/lib/sdklib.jar com.android.sdklib.build.ApkBuilderMain main_unsigned.apk -v -u -z bin/main.ap_ -f bin/classes.dex -rf src

生成签名文件

1 keytool -genkey -alias my.keystore -keyalg RSA -validity 20000 -keypass 123456 -storepass 123456 -keystore my.keystore

生成签名文件时,提示输入姓名单位之类都可以直接回车忽略,最后输入y确认即可

对apk文件签名

jarsigner -verbose -keystore my.keystore -keypass 123456 -storepass 123456 -signedjar main.apk main_unsigned.apk my.keystore

接下来就可以安装测试了

 
 
 

Android使用WebView打包网页成app的更多相关文章

  1. Android中webView和网页的交互

     Android中webView和网页的交互 Android中webView跟网页的交互式通过JavaScript进行的.具体步骤: 1.创建JavaScript,在点击的时候调用JavaScript ...

  2. Android 使用WebView显示网页

    构建WebView就可以显示Web信息.因为我觉得这里会讲述很多方式来实现WebView,所以我决定为每一种方式创建一个对应的Activity,MainActivity通过Button可以点击进入对应 ...

  3. android通过webview调起支付宝app支付

    webview在加载网页的时候会默认调起手机自带的浏览器加载网页,用户体验不好.但当用户设置浏览器客户端(setWebViewClient)设置这样的监听事件之后,当请求url的时候就不会打开手机自带 ...

  4. android 通过webview调起支付宝app支付

    网站学习:http://blog.csdn.net/zhuyu19911016520/article/details/71763900

  5. Android应用安全开发之浅谈网页打开APP

    一.网页打开APP简介 Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布 ...

  6. Android的WebView控件载入网页显示速度慢的究极解决方案

    Android的WebView控件载入网页显示速度慢的究极解决方案 [转载来源自http://hi.baidu.com/goldchocobo/] 秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国 ...

  7. 【转】Android的WebView控件载入网页显示速度慢的究极解决方案

    秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国外很多网站,也看过PhoneGap的代码,一直无解. 一般人堆WebView的加速,都是建议先用webView.getSettings().setB ...

  8. HTML5学习总结-10 Android 控件WebView显示网页

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient 1)setWebClient: ...

  9. Android:控件WebView显示网页

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...

随机推荐

  1. Ubuntu搭建Spring源码环境常见问题

    在一心想要学习Spring框架源码时,我们会遇到很多麻烦的问题.开始本文前,你只需要拥有一个装好IDEA的Ubuntu系统就可以愉快启程了.如果还没有IDEA,可以参考在Ubuntu上安装Intell ...

  2. 【Python】机器学习之单变量线性回归 利用正规方程找到合适的参数值

    [Python]机器学习之单变量线性回归 利用正规方程找到合适的参数值 本次作业来自吴恩达机器学习. 你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方),数据中包括不同 ...

  3. 最新 猎豹移动java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.猎豹移动等10家互联网公司的校招Offer,因为某些自身原因最终选择了猎豹移动.6.7月主要是做系统复习.项目复盘.Leet ...

  4. VS code 的使用

    VS code 是一个非常不错的代码编辑器.它不依赖与任何编译器或者解释器,但却能高效的利用第三方编译器或解释器来给用户提供良好的代码编写环境. 我喜欢VS code的三点,丰富强大的插件,快捷的语法 ...

  5. Python基础『一』

    内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...

  6. Django-报错信息及admin后台汉化

    django-admin 汉化 效果对比 django admin 后台 报错信息 配置 修改配置文件中的 LANGUAGE_CODE 与 TIME_ZONE 即可. 将 django admin 后 ...

  7. vim 插件 入门

    vim 手册 vimtutor 精简版本 help user-manual 详细手册 一些vim自带设置 set nu "显示行号 set cursorline "高亮显示当前行 ...

  8. k8s集群升级

    集群升级 由于课程中的集群版本是 v1.10.0,这个版本相对有点旧了,最新版本都已经 v1.14.x 了,为了尽量保证课程内容的更新度,所以我们需要将集群版本更新.我们的集群是使用的 kubeadm ...

  9. k8s之自定义指标API部署prometheus

    1.自定义指标-prometheus node_exporter是agent;PromQL相当于sql语句来查询数据; k8s-prometheus-adapter:prometheus是不能直接解析 ...

  10. Spring IOC Container

    All the notes are from Spring Framework 5 Doc. 一.Introduction to the Spring IOC Container and Beans ...