• Android使用WebView打包网页成app


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

    复制代码
     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

    接下来就可以安装测试了

     
     
     
  • 相关阅读:
    多条件复合搜索的实现
    mysql字符集统一
    JS控制彈出窗口
    mysql常用sql
    正则表达式
    航班时间
    1月19日
    1月28日check小爱用
    在么小猫
    大连美发备考
  • 原文地址:https://www.cnblogs.com/linybo/p/11057811.html
Copyright © 2020-2023  润新知