精华内容
下载资源
问答
  • 相信有不少做网站的小伙伴都想自己APP来方便用户使用,目前封装APP主要有webapp与wap2app两种,webapp相对比较简单可网页在线打包生成,而wap2app则可以利用开发工具去配置很多原生的功能,运行也更加流畅。...

    相信有不少做网站的小伙伴都想自己做个APP来方便用户使用,目前封装APP主要有webapp与wap2app两种,webapp相对比较简单可网页在线打包生成,而wap2app则可以利用开发工具去配置很多原生的功能,运行也更加流畅。相对于webapp,wap2app的使用体验更加接近原生app,整体性能也更有优势。那么要如何把网站封装成wap2app呢?下面就来介绍下网站封装wap2app的打包方法。

    一、进入DCloud官网下载HBuilderX开发工具

    首先我们要打开DCloud的官网,下载第一个HBuilderX开发工具,下面以Windows版为例,选择正式版下的APP开发版下载安装。

    6c30b73d7535786831e303199c6a6a3c.png

    3caea798cc10db2d1c3083fda8e70453.png

    下载完成后找到下载目录双击进入开发工具,如下图所示:

    c1fe9955ee15bda7792add325ae22b80.png

    二:登录开发工具新建wap2app项目

    打开开发工具后先注册登录开发者账号然后鼠标点击左上角新建项目,选择wap2app,然后把APP名称与网站首页地址填写进去,点击创建。

    eaca0e3b87782f1ad9c44d350b1203ed.png

    创建成功后我们会看到左边会出现一个新建的工程包,如下图所示:

    e39d4f356c7f850dfffeb3e152ac6f8c.png

    三、配置所需文件在线云打包

    点击工程包打开manifest.json文件配置APP图标与启动图及相关功能权限。点击浏览上传图标后选择自动生成所有图标并替换(APP启动图不传也可用默认的,这里仅做测试,相关功能权限可按需进行配置,如有不懂欢迎前来交流学习。)

    4db983ec43f980e98b76424b36b4002c.png

    配置完成后点击发行选择原生APP-云打包进入打包配置页面,如下图所示:

    33df8d80eb71e8b05b4c86ddd6cffc63.png

    c41b8595bb252ae9fb94a2ec628b3dd4.png

    进入打包配置界面配置APP证书及相关功能,这里以测试证书为例(如果自己有证书可以用自己的,没有可以用公共测试证书或者DCloud老版证书都行,其他功能可按照自己所需进行配置。)配置完成后点击打包按钮进行云打包,稍等片刻即可打包成功,打包成功后点击下载地址即可下载安装自己的APP了。

    df03ab2185f91e399753ccdb9cb2d67f.png

    以上为wap2app的打包方法,相信大家稍加摸索即可轻松上手。至于APP的配置脚本等比较高阶的话题由于相对复杂这里不在阐述,如有需要欢迎交流相关问题。以下为网站封装wap2app的演示视频,欢迎大家交流学习!

    知乎视频www.zhihu.com
    知乎视频www.zhihu.com
    展开全文
  • 网上下载了一个jQuery 写的网页抽奖例子,稍微了修改。 想把它变成一个exe可执行文件。我该怎么呢? 文件目录如下: ... 我怎么把他打包exe单文件呢?有人说二次打包?一次都没过。。
  • 因此就想到用 electron 个播放器 App,就可以读本地的网易云音乐目录了。 生成骨架 由于习惯用 vue,因此也准备用 vue 来实现这个应用。而目前就已经有个 ...
  • Android 网络爬虫demo

    千次阅读 2016-07-26 16:22:44
    嗯……………………………………… ...listview做成卡片式的了 然后配色弄的也很有纸质感啊啊啊 反正自己还挺喜欢的 然后就看看是怎么弄的 看一下每个类都是干啥的 : MainActivity:主界面的Acti

    嗯………………………………………
    我也不懂爬虫是什么意思 就是从网页上扒数据吧应该是这样
    所以这个demo抓取的是我们学校新闻网页的东西
    看一下效果
    这里写图片描述

    抓的是这个网页 然后写了一个APP
    是这样的
    这里写图片描述这里写图片描述

    把listview做成卡片式的了 然后配色弄的也很有纸质感啊啊啊
    反正自己还挺喜欢的
    然后就看看是怎么弄的
    这里写图片描述

    看一下每个类都是干啥的 :
    MainActivity:主界面的Activity
    MainAdapter:listview的适配器
    NetWorkClass:链接网络 使用HttpClient发送请求、接收响应得到content 大概就是拿到了这个网页的什么鬼东西
    还有好多就是一个html的代码 要解析这个
    News:这个类里有两个属性 一个标题 一个是这个标题新闻点进去那个url;
    NewsActivity:详细新闻界面
    PullListView:重写了listview 具有下拉刷新和上拉加载功能

    然后从oncreat()开始看:

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            InitView();
            MainThread mt = new MainThread(newsUrl);
            final Thread t = new Thread(mt, "MainThread");
            t.start();
    
            pullListView.setOnRefreshListener(new PullListView.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    isGetMore = false;
                    MainThread mt = new MainThread(newsUrl);
                    Thread t = new Thread(mt, "MainThread");
                    t.start();
    
                }
            });
    
            pullListView.setOnGetMoreListener(new PullListView.OnGetMoreListener() {
                @Override
                public void onGetMore() {
                    isGetMore = true;
                    if (num > 1) {
                        MainThread mt = new MainThread(nextPage);
                        Thread t = new Thread(mt, "MainThread");
                        t.start();
                    }
    
                }
            });
            pullListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent intent = new Intent(MainActivity.this,NewsActivity.class);
                    intent.putExtra("url",list.get(position-1).getUrl());
                    startActivity(intent);
    
                }
            });
    
        }

    这个里面主要就是先初始化了数据
    然后new了一个线程 因为涉及到了网络请求 所以我们要开线程去执行 然后有一些listview的下拉上拉点击的绑定
    所以主要内容是在线程里面
    再看线程之前 先看一下networkClass

    package com.example.katherine_qj.news;
    
    import android.net.http.HttpResponseCache;
    import android.util.Log;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    /**
     * Created by Katherine-qj on 2016/7/24.
     */
    public class NetWorkClass {
        public String getDataByGet(String url){
            Log.e("qwe","content");
            String content ="";
            HttpClient httpClient = new DefaultHttpClient();
            Log.e("qwe","content1");
            /*使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。
            1. 创建HttpClient对象。
            2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
            3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
            4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
            5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
            6. 释放连接。无论执行方法是否成功,都必须释放连接*/
            HttpGet httpGet = new HttpGet(url);
            try {
                HttpResponse httpResponse = httpClient.execute(httpGet);
               // HttpReponse是服务器接收到浏览器的请求后,处理返回结果常用的一个类。
                if(httpResponse.getStatusLine().getStatusCode() == 200) {
                    /*getStatusLine()
                   获得此响应的状态行。状态栏可以设置使用setstatusline方法之一,也可以在构造函数初始化*/
                    InputStream is = httpResponse.getEntity().getContent();
                    /*getEntity()
                    获取此响应的消息实体,如果有。实体是通过调用setentity提供。*/
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                    String line;
                    while ((line = reader.readLine()) != null){
                        content += line;
                    }
                }
            }catch (IOException e)
            {
                Log.e("http",e.toString());
            }
            Log.e("sdf",content);
            return  content;
        }
    }
    

    注释的很详细了
    大概就是 有一个getDataByGet方法 然后接受一个url参数 经过一系列请求得到网页内容 返回一个content
    下来就是使用这个类的线程了

     public class MainThread implements  Runnable{
            private String url;
            public MainThread(String url){
                this.url = url;
            }
            @Override
            public void run() {
                NetWorkClass netWorkClass =new NetWorkClass();//new 了一个network类
                content = netWorkClass.getDataByGet(url);//接收这个类返回的那个字符串也就是需要解析的那一串
                Log.e("qwe",content);
                handler.sendEmptyMessage(111);
            }
        }

    就是利用这个线程去得到content 然后通过handle传递到主线程去解析

         private final android.os.Handler handler = new android.os.Handler(){
           public  void  handleMessage(Message msg){
               switch (msg.what){
                   case 111:
                       analyseHTML();
                       if(isGetMore){
                            mainAdapter.notifyDataSetChanged();
               /*每一次notifyDataSetChange()都会引起界面的重绘。当需要修改界面上View的相关属性的时候,
                 最后先设置完成再调用notifyDataSetChange()来重绘界面。*/
                       }else {
                           mainAdapter = new MainAdapter(MainActivity.this, list);
                           pullListView.setAdapter(mainAdapter);
                       }
                       pullListView.refreshComplete();
                       pullListView.getMoreComplete();
                       break;
               }
           }
         };
    

    analyseHTML();
    发现其实解析的东西在这个方法里面 所以 这里才是解析网页的东西啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊:

     public void analyseHTML(){
             if(content!=null){
                 int x= 0;
                 Document  document = Jsoup.parse(content);
                 //解析HTML字符串
                 if (!isGetMore) {
                     list.clear();
                     Element element = document.getElementById("fanye3942");//拿到fanye3942这个节点
                     String text = element.text();//得到这个节点的文本部分
                     System.out.print(text);
                     num = Integer.parseInt(text.substring(text.lastIndexOf('/') + 1, text.length() - 1));
                     System.out.print(num);
                 }
                     Elements elements = document.getElementsByClass("c3942");//得到c3942这个节点中的所有子节点
                     while(true){
                        if(x==elements.size()){
                            System.out.print(elements.size());
                            break;//遍历到最后就退出
                        }
                         News news = new News();
                         news.setTitle(elements.get(x).attr("title"));//分别得到每一个子节点的需要的文本部分
                         news.setUrl(elements.get(x).attr("href"));
                        // list.add(news);
                         if (!isGetMore||x>10){
                             list.add(news);
                             if(x>=25){
                                 break;
                             }//这个是因为我们学校的网页有重复
                         }
                         x++;
    
                     }
                     if (num>1){
                         nextPage = url+"/"+ --num+".htm";//因为有翻页这里得到了下一页的url在上拉的时候会开启线程去请求数据
                         System.out.println("qqqqqqqqqqq"+nextPage);
                     }
    
                 }
             }
    

    Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
    所以android基于Jsoup 把content搞成Document 对象
    然后就可以慢慢分解去拿了 然后拿哪里的数据就要看需要了
    我开始一直不知道那些fanye3942 和c3942是啥 后来才知道是需要的数据的节点id或者class
    这里写图片描述
    就像这样
    然后把每一次遍历的数据都加到集合里面 给listview绑定集合就好了

    大概主页面就是这样 然后跳转页面 就是因为news里面还放入了每一个新闻点击之后的url所以传到NewsActivity中再利用相同的思路去解析显示就好了

    package com.example.katherine_qj.news;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Message;
    import android.util.Log;
    import android.widget.EditText;
    import android.widget.TextView;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    /**
     * Created by Katherine-qj on 2016/7/25.
     */
    public class NewsActivity extends Activity {
        private TextView textTitle;
        private TextView textEdit;
        private TextView textDetail;
        private String title;
        private String edit;
        private String  detail;
        private StringBuilder text;
        private String url;
        private Document document;
        private String  content;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_news);
            InitView();
            url=getIntent().getStringExtra("url");
            Log.e("qqq",url);
            NewsThread newsThread = new NewsThread(url);
    
            final Thread t = new Thread(newsThread,"NewsActivity");
            t.start();
    
        }
        public void InitView(){
            textTitle =(TextView)findViewById(R.id.textTitle);
            textEdit =(TextView)findViewById(R.id.textEdit);
            textDetail = (TextView)findViewById(R.id.textDetail);
        }
        private final android.os.Handler handler = new android.os.Handler(){
          public  void handleMessage(Message msg){
              if(msg.what==1001){
                  document = Jsoup.parse(content);
                  analyseHTML(document);
                  textTitle.setText(title);
                  textEdit.setText(edit);
                  textDetail.setText(text);
              }
    
          }
        };
        public class  NewsThread implements  Runnable{
            String url;
            public NewsThread(String url){
                this.url = url;
            }
            @Override
            public void run() {
    
                NetWorkClass netWorkClass = new NetWorkClass();
                content = netWorkClass.getDataByGet(url);
                System.out.print("qqq"+content);
                handler.sendEmptyMessage(1001);
            }
    
    
        }
        public void analyseHTML(Document document){
            if (document!=null){
                Element element = document.getElementById("nrys");
                Elements elements = element.getAllElements();
                title = elements.get(1).text();
                edit = elements.get(4).text();
                Element mElement = document.getElementById("vsb_content_1031");
                if(mElement != null) {
                    Elements mElements = mElement.getAllElements();
                    text = new StringBuilder();
                    for (Element melement : mElements) {
                        if(melement.className().equals("nrzwys") || melement.tagName().equals("strong")){
                            continue;
                        }
    
                        if(!melement.text().equals(" ") && !melement.text().equals(""));{
                            text.append("  ").append(melement.text()).append("\n");
                        }
                        if (melement.className().equals("vsbcontent_end")) {
                            break;
                        }
                    }
                }
            }
        }
    }
    

    然后这个demo就写好了 可以试着去再弄一些别的网页
    有人吐槽我android代码写得好丑 和C语言一样
    哈哈哈哈哈哈
    现在想起来这个突然好好笑。

    over!

    展开全文
  • 机顶盒开发初体验

    2019-10-05 19:01:44
    一直自己定位前端人才,可以开发网站,可以手机页面,想着有机会的话也做做高大上的APP怎么就半路出家了呢!!从北京灰溜溜的回到郑州,心里不是滋味啊!! 一直以为说起浏览器就是(IE\Chrome\FF)等,...

    一直把自己定位成前端人才,可以开发网站,可以做手机页面,想着有机会的话也做做高大上的APP,

    怎么就半路出家了呢!!从北京灰溜溜的回到郑州,心里不是滋味啊!!

    一直以为说起浏览器就是(IE\Chrome\FF)等,大家常用的东西。到了这里才知道,只要可以解析网页的就是浏览器。

    我工作中用的浏览器内置在机顶盒(不知道的朋友自己百度)中,叫什么,我也不知道呢!!显示屏是一台液晶电视(oh my god),感觉自己真的好小白啊!!天下之大无奇不有。

    我的装备:笔记本电脑,电视机,机顶盒,遥控器,还有各种线(音频,视频。。。)

    在自己的电脑上写好网页,上传服务器后,就可以在电视(后门,一个只有开发人员才知道的操作接口)上看了。工作中的页面很简单,不会像pc网站那样复杂。前后台数据交互是必须的,虽然不多。原因是前台自己总结了一个5000行的数组对象,数据的维护就修改这个就好了。

    至于事件和键盘挺像的,我们是遥控器事件哦,每天就抱着遥控器按,也是够奇葩的。

    对了还有自己开发的一个规范,因为有自己的浏览器,一些全局的对象和方法挺多的,到现在我也仅仅搞清楚一点。

    不得不说的导师,姓索,说话不太方便。但是工作经验真的很丰富,处理问题信手拈来。周围的同事遇到问题,都找他,人缘特别的好,我是一通羡慕啊。我也想变成大牛,可是IQ不够啊,看了所谓的十大算法,前三个搞了几天,也就基本明白,剩下的直接看不下去了。

    在这个公司呢,感受最多的就是正规吧,每个人有企业微信,企业邮箱,还有办公系统(OA),PM,各种名字,我瞬间弱弱的。。。

    工作中比较麻烦的就是测试了,不像电脑端那样方便直观。有根数据线(长得无法形容),连接机顶盒和电脑,就可以打开软件看到电视网站的日志了。同事之间传输工作文件,要用邮箱,还得MD5加密,呵呵。

    希望自己能有阿Q精神,继续努力,适应这份工作,并且做好这份工作。

    转载于:https://www.cnblogs.com/gaoxt/p/6861164.html

    展开全文
  • 微信小程序之WebSocket

    2017-09-28 16:14:28
    游戏规则是这样的:雷换金子,挖到金子加一分,每人轮流一次(A挖完轮到B,B挖完A才能再点击),点中金子就算你的,也不会炸,游戏继续,直到场上所有的金子都挖完游戏才结束。跟扫雷一样,数字也是表示周边有...
  • C#基础类库

    2018-07-11 08:45:26
    C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以实现 CookieHelper C#操作Cookie的帮助类,添加Cookie,删除Cookie,修改Cookie,清理Cookie SessionHelper C#...

空空如也

空空如也

1 2 3 4
收藏数 78
精华内容 31
关键字:

怎么把网页做成app