webAPP打包成apk流程(原理:手机本地解webapp压缩包后打开index.html)
1.首先你需要一个Android开发软件,推荐Android Studio。
下载地址:http://www.android-studio.org/
安装过程默认即可,会遇到的问题就一些环境变量,sdk路径选择什么的,这里不详细介绍。
2.创建一个项目
进入软件界面我们开始新建一个项目,项目名自取,项目路径选择,其他的默认即可
3.MyApplication.java(懒,就不解释了,代码直接上。主要就是 1.创建webview 2.创建一个线程把文件复制到一个文件夹里 3.解压缩包 4.webview的url指向本地)
package com.example.cmyh.xxx;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.progress.ProgressMonitor;
public class stuGuide extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stu_guide);
/*WebView main = (WebView)findViewById(R.id.main);*/
webView = (WebView) findViewById(R.id.main);
new Thread(new Runnable() {
@Override
public void run() {
putfile();
try {
unZipWebZipInThread();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();// 返回前一个页面
return true;
}
return super.onKeyDown(keyCode, event);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
File path = Environment.getExternalStorageDirectory();
String mainUrl ="file://" + path + "/stuGuide/studentGuide/index.html";
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl(mainUrl);
}
};
private void putfile() {
InputStream is = null;
try {
is = this.getAssets().open("studentGuide.zip");
File path = Environment.getExternalStorageDirectory();
System.out.println("path== " + path);
File file = new File(path + "/stuGuide");
file.mkdir();
File absoluteFile = file.getAbsoluteFile();
System.out.println("absoluteFile===" + absoluteFile);
if (file.exists()) {
System.out.println("file exists");
}
FileOutputStream fos = new FileOutputStream(new File(file.getAbsolutePath()+"/studentGuide.zip"));
byte[] buffer = new byte[1024];
int byteCount;
while ((byteCount = is.read(buffer)) != -1) {
fos.write(buffer, 0, byteCount);
}
fos.flush();
is.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void unZipWebZipInThread() throws Exception {
File path = Environment.getExternalStorageDirectory();
String dstPath = path + "/stuGuide/studentGuide.zip";
ZipFile zipFile = new ZipFile(dstPath);
if (zipFile.isValidZipFile()) {
final ProgressMonitor progressMonitor = zipFile.getProgressMonitor();
new Thread(new Runnable() {
@Override
public void run() {
try {
int percentDone;
while (true) {
Thread.sleep(50);
percentDone = progressMonitor.getPercentDone();
if (percentDone >= 100) {
break;
}
}
mHandler.sendEmptyMessage(1);
} catch (InterruptedException e) {
//JavaLog.e(TAG, e);
}
}
}).start();
zipFile.extractAll(path + "/stuGuide/");
}
}
}
4.Activity.xml(随便上个最简单的)
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main">
</WebView>
5.AndroidManifest.xml
网络允许
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
sdcard外部存储权限允许
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
webview全屏去头部
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
手机转屏不重新加载activity
android:configChanges="keyboardHidden|orientation|screenSize">
6.在main文件夹下新建一个assets文件夹,把webapp打包成zip压缩包,粘贴放入
需要解压缩,所以得导入(版本任意)zip4j_1.3.2.jar
下载地址:http://download.csdn.net/download/cmyh100/9966189
build.gradle 需要配置一下刚刚导入的jar包
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.1'
compile files('libs/zip4j_1.3.2.jar')
}
============================================================================ 增加兼容性
引入一个 ProgressWebView.java 里面有分装各钟兼容属性
下载地址:http://download.csdn.net/download/cmyh100/9966588
Activity.xml 里面修改为:
<com.example.cmyh.stuguide.ProgressWebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main">
</com.example.cmyh.stuguide.ProgressWebView>
MyApplication.java下
private WebView webView;修改为private ProgressWebView webView;
webView = (ProgressWebView) findViewById(R.id.main);
webView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url){
System.out.println("showMyUrl:"+url);
view.loadUrl(url);
return true;
}
});
---------------------
作者:cmyh
来源:CSDN
原文:https://blog.csdn.net/cmyh100/article/details/77862962
版权声明:本文为博主原创文章,转载请附上博文链接!