Android 混合式开发AppCan介绍

Android程序员开发已从最早的异常火热到现在已经逐渐趋向稳定,目前企业针对Android开发工程师的要求要求已逐步提高,现在想从众多的面试者中脱颖而出,必须打好坚实的代码基础。

今天为大家介绍一款目前国内较流行的混合开发平台:AppCan。

先来看一下AppCan的简介:

广义上,AppCan是一套完整庞大的、云端一体的移动PaaS平台,拥有覆盖移动应用全生命周期的产品体系,同时服务2D开发者(工具)、2B企业(移动化、数字化)、2G政府(双创),是国内移动平台技术的领跑者。

技术原理

AppCan是基于HTML5技术的Hybird跨平台移动应用开发工具。

开发者利用HTML5+CSS3+JavaScript技术,通过AppCan IDE集成开发系统、云端打包器等,快速开发出Android、iOS、WP平台上的移动应用。

创建一个AppCan应用

1、应用简介

该应用会一步一步给你演示怎么开发一个AppCan应用。该应用包含最常用的插件,window、request、file等。另外教会你使用AppCan应用开发平台,AppCan IDE等相关知识。

开始使用API>>

2、开发环境

在AppCan的官方网站上创建应用,并在IDE中开发完成后,到官网上进行打包。

1)、注册并登陆AppCan应用管理系统

http://dashboard.appcan.cn/app )。

2)、点击创建应用。

3)、 输入你的应用名称,和应用描述,然后保存。

4)、点击【开发】按钮,进入天气应用的详细信息。

AppCan官网下载并安装AppCan IDE 安装下载

5)、打开AppCan IDE,并用刚才注册的用户登陆

6)、登录进入IDE

7)、点击新建项目

8)、选择同步AppCan 项目,点击下一步。

9)、选择天气点击完成。

10)、整个应用创建完成了。

3、应用开发

1) 、打开index.html页面加入应用头部,我们的头部都是统一的,所以加入一下代码

删除默认的背景图片,你也可也在css中修改,index/css/main.css

2)、 打开index_content.html页面这个是我们的内容页面。因为这是天气列表内容页,引入列表控件的js文件、css文件(appcan.listview.js、appcan.control.css),在body中插入一个容器元素来显示列表内容。

<div class="city-list content">

</div>

3)、用listview控件添加列表内容我们添加六个城市,listview的icon我们放置天气状况,设置天气列表,刚开始我们我们用默认图片,等列表加载完成之后我们 用appcan.request.ajax()方法异步请求真正的天气列表数据。

列表添加完成,异步获取天气状况,我们用百度的天气api。

添加点击事件,当点击的时候保存点击的城市,并打开详情页面。

4)、我们添加一个方法当页面下拉的时候完成刷新动作,appcan sdk中已经封装好了该方法

5)、到此我们就完成了整个城市列表的内容了下面就是完成的内容。

<!DOCTYPE html>

<html class="um landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px">

<head>

<title></title>

<meta charset="utf-8">

<meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">

<link rel="stylesheet" href="css/fonts/font-awesome.min.css">

<link rel="stylesheet" href="css/ui-base.css">

<link rel="stylesheet" href="css/ui-box.css">

<link rel="stylesheet" href="index/css/main.css">

<link rel="stylesheet" href="css/ui-color.css">

<link rel="stylesheet" href="css/appcan.control.css">

</head>

<body class="um-vp" ontouchstart>

<div class="city-list content">

</div>

<script src="js/appcan.js"></script>

<script src="js/plugin/appcan_plugin.js"></script>

<script src="js/appcan.listview.js"></script>

<script>

function updateInfo(city,ele){

var weatherUrl = ‘http://api.map.baidu.com/telematics/v3/weather?location=‘+city+‘&output=json&ak=hTXrtTGGcljoOMdf2jZcc1yD‘;

appcan.request.getJSON(weatherUrl,function(data){

if(data.error){

alert(‘获取天气出错‘);

}else{

var weatherData = data.results[0].weather_data;

var today = weatherData[0];

$(ele).find(‘.lis-icon-s‘).css(‘background-image‘,‘url("‘+today.dayPictureUrl+‘")‘);

}

});

}

appcan.ready(function(){

appcan.frame.setBounce(0, function(type) {

//$("#pullstatus"+type).html(!type?"开始下拉":"开始上拖");

}, function(type) {

//$("#pullstatus"+type).html(!type?"下拉超过临界点,产生事件了!":"超过临界点,产生事件了!");

}, function(type) {

$(‘.city-list li‘).each(function(i,v){

var data = v.lv_data;

if(!data){

return;

}

updateInfo(encodeURI(data.title),v);

});

appcan.frame.resetBounce(type);

})

var lv = appcan.listview({

selector : ".city-list",

hasIcon : true,

hasAngle : true

});

lv.set([{

title : "北京",

icon:"./css/res/appcan_s.png",

icontitle : "",

},

{

title : "南京",

icon:"./css/res/appcan_s.png",

icontitle : "",

},

{

title : "杭州",

icon:"./css/res/appcan_s.png",

icontitle : "",

},

{

title : "深圳",

icon:"./css/res/appcan_s.png",

icontitle : "",

},

{

title : "上海",

icon:"./css/res/appcan_s.png",

icontitle : "",

},

{

title : "三亚",

icon:"./css/res/appcan_s.png",

icontitle : "",

},

{

title : "昆明",

icon:"./css/res/appcan_s.png",

icontitle : "",

}]);

function openDetail(city){

appcan.window.open({

name:‘detail‘,

data:‘detail.html?‘+city,

aniId:10

});

appcan.locStorage.val(‘city‘,city);

}

lv.on(‘click‘, function(ele, obj, subobj) {

openDetail(encodeURI(obj.title));

});

$(‘.city-list li‘).each(function(i,v){

var data = v.lv_data;

if(!data){

return;

}

updateInfo(encodeURI(data.title),v);

});

})

</script>

</body>

</html>

6)、新增天气详情页面detail.html、detail_content.html两个页面detail.html页面里面我们加一个标题和页尾,标题加一个返回按钮

<!--header开始-->

<div id="header" class="uh t-wh ub c-blu">

<!- 返回按钮开始 -->

<div class="nav-btn" id="nav-left">

<div class="fa fa-arrow-left ulev2"></div>

</div>

<!- 返回按钮结束 -->

<h1 class="ut ub-f1 ulev-3 ut-s tx-c" tabindex="0">

<span class="detail-title"></span>

</h1>

<div class="nav-btn umw4 ub ub-ac ub-pc">

</div>

</div>

<!--header结束--><!--content开始-->

<div id="content" class="ub-f1 tx-l appCan ub-img4">

</div>

<!--content结束-->

<!--footer-->

<div id="footer" class="uinn-z1">

<div class="tx-c t-93 ulev0 ufm1">www.appcan.cn</div>

<div class="tx-c t-93 ulev-4 umar-at1">正益无线(北京)科技有限公司</div>

</div>

7)、我们用button控件来给返回按钮加上事件

appcan.button(".nav-btn", "btn-act", function() {

appcan.window.close(-1);

});

8)、获取当前城市并设置当前状态页面,标题的内容

var city = appcan.locStorage.val(‘city‘);

$(‘.detail-title‘).html(decodeURI(city)+‘天气详情‘);

9)、现在添加城市天气详情页面,因为天气为三天的天气,所以我们这里可以用列表控件,先生成列表数据,三天天气都大致相同,我们定义一个模版。

<script type="text/template" id="weather-tmp">

<div class="day">

<span class="temperature"><%-weather_data.temperature%></span>

<div>

<span><%-weather_data.wind%></span>

<span><%-weather_data.weather%></span>

</div>

<span class="weather-pic">

<img src="<%-weather_data.dayPictureUrl%>"><br>

<span><%-weather_data.date%></span>

</span>

</div>

</script>

10)、新增更新天气函数,来更新天气数据

11)、执行更新数据,在更新数据前先打开一个提示框表明正在加载数据,当数据加载成功删除提示框,把获取的数据传给更新列表函数进行渲染

12)初始化页面,获取传来的城市然后根据该城市更新页面数据

appcan.ready(function(){

appcan.initBounce();

var city = appcan.locStorage.val(‘city‘);

updateInfo(city);

})

4、应用打包

开发完成打包应用有两种方式,一种是本地打包,一种是线上打包。

4.1、本地打包(仅供测试使用)

1)、点击发行

或者右键点击phone,然后点击生成安装包

2)、可以修改应用名称,上传图标,我们使用默认的然后点击下一步

3)、选择要生成的平台,启动画面点击下一步

4)、选择需要的插件然后点击完成。等待打包如果打包完成就会自动打开应用目录。

4.2、线上打包

1)、点击右键把代码提交的服务器

2)、选择要提交的文件。点击ok

3)、选择应用进入详情页面,并点击应用开发,进入应用开发页面

4)、点击应用打包,点击图标设置可以修改图标,点击启动页面可以修改启动页面,然后选择插件,证书,最后点击云端打包。

5)、选择平台和版本号,点击生成安装包。

6)、等待打包完成,可以下载生成的安装包了,点击下一步进入应用详情页面。

以上就是今天要介绍的内容,谢谢。

时间: 2024-08-24 11:48:30

Android 混合式开发AppCan介绍的相关文章

Android UI开发 popupwindow介绍以及代码实例

摘要 PopupWindow在android.widget包下,弹出窗口的形式展示.官方文档对该控件的描述是:“一个弹出窗口控件,可以用来显示任意视图(View),而且会浮动在当前 活动(activity)的顶部”.PopupWindow可以让我们实现多种自定义控件,例如:menu.alertdialog等弹窗 PopupWindow在android.widget包下,弹出窗口的形式展示.官方文档对该控件的描述是:“一个弹出窗口控件,可以用来显示任意视图(View),而且会浮动在当前 活动(ac

Android多媒体开发介绍(转)

Android多媒体开发介绍 转自:http://blog.csdn.net/reiliu/article/details/9060557 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3.AAC.AMR.JPG.PNG.GIF等.从功能上分为两部分,一是音/视频的回放(PlayBack),二是音视频的纪录(Recorder). CODEC(编解码器)使用OpenMAX 1L

Android项目开发全程(二)--Afinal用法简单介绍

本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目中用到的几个功能: Afinal简介 Afinal 是一个android的sqlite orm 和 ioc 框架.同时封装了android中的http框架,使其更加简单易用: 使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题. Af

上门洗车APP --- Android客户端开发 之 项目结构介绍

上门洗车APP --- Android客户端开发 之 项目结构介绍 前言 虽然公司项目较紧,但还是抽出时间给大家继续更新.     o_O"~ 感谢大家的关注,很高兴和大家共同学习.前面给大家分享了项目中的以下内容: 上门洗车APP --- Android客户端开发 前言及业务简介 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(二) 之前有很多朋友私信过来说想打包一份源码学习,由于本项目也是还

上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下网络框架,之前也了解过一些开源网络通讯架构,也大概看了一部分源码,比如Afinal.Volley.AndBase.Android-async-http等,感觉各自都有各自的优劣,自己也曾封装过一些简单的网络架构,感觉有很多地方需要注意和优化,这里就不贴出来献丑了,感兴趣的朋友可以去查阅学习上面所说的

isual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍

原文 isual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍 前言 不同于iOS, Xamarin 在Visual Studio中针对Android, 可以直接设计使用者介面. 在本篇教学文章中, 笔者会针对Android的专案目录结构以及基本控制项进行介绍, 包含TextView, EditView, Toggle/ Switch以及Seekbar控制项. Android专案目录结构 在Visual Studio建立Android 应用程式专案后, ??

Android应用开发-小巫CSDN博客客户端之显示博文详细内容

Android应用开发-小巫CSDN博客客户端之显示博文详细内容 上篇博文给大家介绍的是如何嵌入有米广告并且获取收益,本篇博客打算讲讲关于如何在一个ListView里显示博文的详细信息,这个可能是童鞋们比较困惑的,因为一篇博客可能有标题.摘要.图片.代码等等元素组成,我们要怎么在一个界面中显示这些内容并且按照自己的指定的方式显示呢,别急,下面会告诉大家. 重新整理一下一篇博文可能有以下元素: 标题 摘要 文本内容 图片 粗标题 代码块 在UI篇小巫已经介绍了,博文详细内容的主要控件就是一个Lis

Android游戏开发之主角的移动与地图的平滑滚动

人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原理 在本人之前博客的文章中介绍过人物在屏幕中的移动方式,因为之前拼的游戏地图是完全填充整个手机屏幕的,所以无需处理地图的平滑滚动.这篇文章我着重的向 大家介绍一下控制人物移动后地图滚动的处理方式.举个例子 如上图所示 比如人物向右移动,如果地图贴在屏幕左边边界 将先移动人物在地图的坐标,当人物在屏幕

Android内核开发:理解和掌握repo工具

由于Android源码是用repo工具来管理的,因此,搞Android内核开发,首先要搞清楚repo是什么东西,它该怎么使用?作为<Android内核开发>系列文章的第二篇,我们首先谈谈对repo工具的理解和使用. 1. repo是什么? repo是一种代码版本管理工具,它是由一系列的Python脚本组成,封装了一系列的Git命令,用来统一管理多个Git仓库. 2. 为什么要用repo? 因为Android源码引用了很多开源项目,每一个子项目都是一个Git仓库,每个Git仓库都有很多分支版本,