Java套壳_套壳开发 给webAPP加上一个apk外壳

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(随便上个最简单的)

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@ id/main">

5.AndroidManifest.xml

网络允许

sdcard外部存储权限允许

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 里面修改为:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@ id/main">

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

版权声明:本文为博主原创文章,转载请附上博文链接!

来源:http://www.icode9.com/content-4-204051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值