zoukankan      html  css  js  c++  java
  • 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

    接下来就可以安装测试了

     
     
     
  • 相关阅读:
    linux 命令——19 find (转)
    linux 命令——18 locate (转)
    linux 命令——17 whereis(转)
    linux 命令——16 which(转)
    linux 命令——15 tail (转)
    linux 命令——14 head (转)
    Java for LeetCode 038 Count and Say
    Java for LeetCode 037 Sudoku Solver
    Java for LeetCode 036 Valid Sudoku
    Java for LeetCode 035 Search Insert Position
  • 原文地址:https://www.cnblogs.com/linybo/p/11057811.html
Copyright © 2011-2022 走看看