原生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.gztar -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源程序文件,比如:

 1 package test.android;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 // import android.app.AlertDialog;
 6 import android.view.Window;
 7 // import android.view.WindowManager;
 8 import android.view.KeyEvent;
 9 import android.webkit.WebView;
10 import android.webkit.WebViewClient;
11 //import android.webkit.WebChromeClient;
12 // import android.webkit.JsResult;
13 // import android.content.DialogInterface;
14 // import android.content.DialogInterface.OnClickListener;
15
16 public class Main extends Activity {
17   public static final String LOAD_URL = "http://www.baidu.com/";
18
19   private WebView webView = null;
20
21   public void onCreate(Bundle savedInstanceState) {
22     super.onCreate(savedInstanceState);
23
24     //this.requestWindowFeature(Window.FEATURE_NO_TITLE);
25     //this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
26
27     webView = new WebView(this);
28     this.setContentView(webView);
29     webView.setWebViewClient(new WebViewClient() {
30       public void onPageFinished(WebView view, String url) {
31         //webView.evaluateJavascript("test();", null);
32       }
33     });
34     /*
35     webView.setWebChromeClient(new WebChromeClient() {
36       public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
37
38         new AlertDialog.Builder(_this)
39         .setMessage(message)
40         .setPositiveButton("OK", new DialogInterface.OnClickListener() {
41           public void onClick(DialogInterface dialog, int which) {}
42         }).show();
43
44         return true;
45       }
46     });
47     */
48     webView.getSettings().setJavaScriptEnabled(true);
49     webView.addJavascriptInterface(this, "native");
50     webView.loadUrl(LOAD_URL);
51   }
52
53   // overwrite back button
54   public boolean onKeyDown(int keyCode, KeyEvent event) {
55     if (KeyEvent.KEYCODE_BACK == keyCode && webView.canGoBack()) {
56       webView.goBack();
57       return true;
58     }
59
60     return super.onKeyDown(keyCode, event);
61   }
62
63 }

将文件保存为Main.java

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

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest  xmlns:android="http://schemas.android.com/apk/res/android" package="test.android">
 3   <application android:icon="@drawable/icon"
 4                android:label="@string/app_name">
 5     <activity android:name=".Main">
 6       <intent-filter>
 7         <action android:name="android.intent.action.MAIN" />
 8         <category android:name="android.intent.category.LAUNCHER" />
 9       </intent-filter>
10     </activity>
11   </application>
12
13   <uses-permission android:name="android.permission.INTERNET" />
14
15 </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.0/aapt package -f -m -J gen -S res -I /opt/android-sdk-linux/platforms/android-24/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

接下来就可以安装测试了

**************转摘:https://www.cnblogs.com/leoparadox/p/5608010.html

转载于:https://www.cnblogs.com/linybo/p/11057811.html

Android使用WebView打包网页成app相关推荐

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

    android通过webview调起支付宝app支付 webview在加载网页的时候会默认调起手机自带的浏览器加载网页,用户体验不好.但当用户设置浏览器客户端(setWebViewClient)设置这 ...

  2. Android使用WebView将网页打包成APP

    引导页 package com.example.pack;import android.content.Intent; import android.os.Handler; import androi ...

  3. Html代码打包后如何修改,html代码打包封装成APP教程

    lbuilder是一个在线打包网站的平台,可以非常方便的把一个手机网站做成APP,也可以直接打包h5代码,免费使用! 下面介绍如何使用lbuilder打包html代码 分七步进行 1.注册lbuild ...

  4. android只有域名打包封装成apk,一个Android Studio工程根据网址打包出不同的apk

    0.更改配置build.gradle(app) android { ....... ....... productFlavors { two_main{ // 设置applicationId(这里很重 ...

  5. Android模拟器Webview打开网页报webpage not available

    错误如下: 解决方法如下: 1.添加网络权限 在 AndroidManifest.xml 清单文件中添加: <uses-permission android:name="android ...

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

    网站学习:http://blog.csdn.net/zhuyu19911016520/article/details/71763900 转载于:https://www.cnblogs.com/niun ...

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

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

  8. android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调

    项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...

  9. 安卓开发之android使用webview时按后退会退出而不是回退的问题

    最近公司使用android打包html5游戏, 使用android点webview打包html5游戏,代码都好了,具体如下 public class MainActivity extends Acti ...

最新文章

  1. 这所211高校通知不放寒假!校园将实行封闭管理!
  2. Python3 练习笔记五
  3. 图解LinkedHashMap原理
  4. OpenCV在Linux上的安装及初试
  5. Go 把类型放在变量名后面,是特立独行还是另有机密?
  6. dev下没有ttyusb_Dev C++ 软件安装教程
  7. 剑指Offer的学习笔记(C#篇)-- 用两个栈实现队列
  8. 浅谈!important对CSS的重要性
  9. ubuntu 15.04安装VMware11
  10. java 枚举类型_java 枚举类型(翻译自Java Tutorials)
  11. 拓端tecdat|数据度量消费贷款—消费者的考虑因素数据分析
  12. 2022年 品牌新零售将去向何方?
  13. 阿里云-高性能计算招聘
  14. Git 64位安装包下载
  15. 计算机制图大赛,制图大赛简介
  16. python面向对象编程实例:烤地瓜
  17. 安卓GB28181跨网段语音对讲
  18. 红旗Linux网卡Bind,请教一下在红旗linux中安装网卡RTL8168/8111的问题
  19. 关于英语学习和字幕的那点事儿
  20. 在python中计算夏普比率和特雷诺比率

热门文章

  1. C语言之指向一维数组的指针
  2. 2022年AI领域有哪些重要突破?(附报告全文)
  3. 初识C语言:IDE的选择与使用【C语言】
  4. 计算日期差(C/C++实现)
  5. 现代法谱估计(3)Burg算法MATLAB及Python实现
  6. 常见windows字体和MacOS字体分类主要有几种?
  7. speedoffice表格如何快速复制整张工作表
  8. TIPTOP 智能仓库扫描系统解决方案
  9. 试用期程序员应该了解的事儿
  10. 遗传算法(Genetic Algorithm)从了解到实例运用(上)(python)