当前位置:  编程技术>移动开发
本页文章导读:
    ▪解决Robotium测试用例crash有关问题        解决Robotium测试用例crash问题今天遇到一个棘手的问题 用robotium框架真机测试客户端时 跑到一半会crash 搜了一堆资料终于解决了 我的程序引起crash主要原因有两个: 1.用Robotium测试框架跑多个.........
    ▪ Cordova CLI源码分析(1)——简介        Cordova CLI源码分析(一)——简介本系列文章分析基于node.js的命令行工具Cordova CLI,所以如果对node.js基础不是很了解,建议参考http://nodejs.gamesys.net/node-js提供的基础教程 文中提到的包和模.........
    ▪ 关于Parse库的配置有关问题       关于Parse库的配置问题在使用Parse的一些相关服务时候,需要下载Parse的SDK,除了需要添加相应的系统框架和库的支持 AudioToolbox.framework  CFNetwork.framework CoreGraphics.framework CoreLocation.framework libz.1.1.........

[1]解决Robotium测试用例crash有关问题
    来源: 互联网  发布时间: 2014-02-18
解决Robotium测试用例crash问题

今天遇到一个棘手的问题

用robotium框架真机测试客户端时 跑到一半会crash

搜了一堆资料终于解决了

我的程序引起crash主要原因有两个:

1.用Robotium测试框架跑多个用例(写在同一个类里),只有第一个通过,第二个会卡顿, 导致crash

原因是若同一个类里写多个测试方法,每个测试方法都会执行一次setUp() 和tearDown()方法,所以每一个用例开始时都是用的同一个启动Activity,如果你上一个用例退出时没有返回到那个Activity,执行下一个用例时会找不到启动Activity,就报错了

解决方法:

在tearDown()里加上返回到开始Activity的方法:solo.goBackto("startActivity");


2.再跑时,发现程序还是会卡在第一个用例结束时无法退出,再检查,

tearDown方法写错了,之前按照网上资料写的,并不好使,还是会引起崩溃

@Override
public void tearDown() throws Exception {

try {
solo.finalize();// 执行清理工作
} catch (Throwable e) {
e.printStackTrace();
}
Activity myActivity=getActivity();
if(myActivity!=null)
myActivity.finish();// 测试结束,关闭应用程序
super.tearDown();

}

把关闭方法修改成solo.finishOpenedActivities();  OK了,至于为什么我也没有研究,有谁知道的还请留言告诉我,不胜感激~

 

最后,我的工程整个tearDown方法如下:

@Override
public void tearDown() throws Exception {
//关闭之前先回到主页面
Boolean notClosed = true;
while (notClosed) {
solo.goBack();
if (solo.waitForText("确定退出客户端吗", 1, 100, false, true)) {
notClosed = false;
solo.clickOnButton("取消");
break;
}
}
//关闭
try {

this.solo.finishOpenedActivities();
} catch (Throwable e) {
e.printStackTrace();
}
Activity myActivity=getActivity();
if(myActivity!=null)
myActivity.finish();
super.tearDown();
}





    
[2] Cordova CLI源码分析(1)——简介
    来源: 互联网  发布时间: 2014-02-18
Cordova CLI源码分析(一)——简介

本系列文章分析基于node.js的命令行工具Cordova CLI,所以如果对node.js基础不是很了解,建议参考http://nodejs.gamesys.net/node-js提供的基础教程

文中提到的包和模块是同一概念

1、简介

Cordova CLI是一个基于node.js的命令行工具,用于编译、部署和管理跨平台的Cordova 混合应用程序。

Apache Cordova 使开发者运用Html, CSS,javascript就能够构建原生移动应用

支持平台

l Android

l BlackBerry 10

l iOS

l Windows Phone 7 & 8

运行环境

Node.js

各平台SDK

安装

npm install -g cordova

默认安装路径

C:\Documents and Settings\xxx\Application Data\npm\node_modules\cordova\src

2、命令参数

全局命令

create <directory> [<id> [<name>]] 创建一个新的 cordova项目,三个参数分别是 保存路径,项目id,项目名称(反域名格式com.xxx.xxxx) 

项目命令

platform [ls | list] list all platforms the project will build to

platform add <platform> [<platform> ...] add one (or more) platforms as a build target for the project

platform [rm | remove] <platform> [<platform> ...] removes one (or more) platforms as a build target for the project

plugin [ls | list] list all plugins added to the project

plugin add <path-to-plugin> [<path-to-plugin> ...] add one (or more) plugins to the project

plugin [rm | remove] <plugin-name> [<plugin-name> ...] remove one (or more) added plugins

prepare [platform...] copies files into the specified platforms, or all platforms. it is then ready for building by Eclipse/Xcode/etc.

compile [platform...] compiles the app into a binary for each added platform. With no parameters, builds for all platforms, otherwise builds for the specified platforms.

build [<platform> [<platform> [...]]] an alias for cordova prepare followed by cordova compile

emulate [<platform> [<platform> [...]]] launch emulators and deploy app to them. With no parameters emulates for all platforms added to the project, otherwise emulates for the specified platforms

serve <platform> [port] launch a local web server for that platform's www directory on the given port (default 8000).

可选参数

-d或--verbose 添加调式信息输出

-v 或--version 输出cordova-cli版本信息

3、目录结构

运行cordova create hello hellotest com.xxx.hellotest

hello/

|--.cordova/

| | -- hooks/

| | -- config.json

|-- merges/

| | -- android/

| | -- blackberry10/

| | -- ios/

|-- www/

| `-- config.xml

|-- platforms/

| |-- android/

| |-- blackberry10/

| `-- ios/

`-- plugins/

刚创建完的merges,platforms,plugins都是空目录,而.cordova/config.json包含create创建时指定的参数{"id":"hellotest","name":"com.xxx.hellotest"}

(1).cordova目录是辨别是否是cordova项目的重要标志,存储一些配置文件和信息;

(2)www目录下存放的是各个平台上一致的web文件,即每个平台使用相同代码,当调用prepare命令时,拷贝此目录下内容到platforms下原生目录;

     config.xml是符合W3C's Packaged Web Apps (Widgets) 标准的配置文件,通过修改config.xml中参数值,cordova-cli完成应用参数的修改

示例:

<?xml version='1.0' encoding='utf-8'?>

<widget id="hellotest" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

    <name>com.jinkai.hellotest</name>

    <description>

        A sample Apache Cordova application that responds to the deviceready event.

    </description>

    <author email="dev@callback.apache.org" href="http://cordova.io">

        Apache Cordova Team

    </author>

    <content src="/blog_article/index.html" />

    <access origin="*" />

    <preference name="fullscreen" value="true" />

<preference name="webviewbounce" value="true" />

<plugins>

     <plugin name="MyPlugin" value="MyPluginClass" />

</plugins>

<content src="/blog_article/index.html" />

</widget>

其中主要有以下几个参数:

<name> 展示给用户的应该程序名称

<widget> 中id属性指定包名(bundle identifier 或application id)

<widget> 中version属性版本

<access> 中 origin 属性,指定网络访问白名单

<preference>  用于存储一些键值对参数

<plugin> 定义原生插件,当运行时Cordova framework确保应用可以调用设备的API接口

<content> 定义web起始页,默认值是index.html

(3)merges目录下存放的是有平台差异的web文件,当调用prepare命令时,拷贝此目录下内容到platforms下原生目录,如果有同名www目录下文件存在,merges目录下文件将覆盖www下文件;

例如存在以下目录结构

merges/

|-- ios/

| `-- app.js

|-- android/

| `-- android.js

www/

`-- app.js

最终编译时,platforms目录下,android目录包含android.js和app.js,iOS目录包含app.js,这个文件与merges目录下ios/app.js一致,即merges目录下文件覆盖www目下文件

(4)platforms 各平台原生应用程序目录结构

(5)plugins 所有插件将会解压后放在此目录

(6)hooks 定义一系列回调函数

包含两类:项目指定和模块指定函数


4、Cordova CLI使用流程

(1)创建应用 cordova create (创建应用程序骨架)

cordova create hello hellotest com.jinkai.hellotest

(2)添加平台 cordova platform add 

cd hello

Mac支持平台

$ cordova platform add ios

$ cordova platform add android

$ cordova platform add blackberry10

Windows支持平台

$ cordova platform add wp7

$ cordova platform add wp8

$ cordova platform add android

$ cordova platform add blackberry10

查看支持平台

cordova platform ls

删除

$ cordova platform remove blackberry10

$ cordova platform rm android

(3)编译cordova build(在platforms目录下生成平台代码)

$ cordova build ios

等价于顺序执行以下两个步骤

 $ cordova prepare ios
 $ cordova compile ios

(4)测试

$ cordova emulate android

(5)添加插件

安装插件cordova plugin add

Basic device information (Device API):

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git

Network Connection and Battery Events:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status.git

Accelerometer, Compass, and Geolocation:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-orientation.git

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git

Camera, Media playback and Capture:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-media-capture.git

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-media.git    

Access files on device or network (File API):

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-file.git

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer.git

Notification via dialog box or vibration:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialogs.git

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git

Contacts:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts.git

Globalization:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization.git

Splashscreen:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git

Open new browser windows (InAppBrowser):

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git

Debug console:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git

查看已安装插件plugin ls 或plugin list 或plugin

$ cordova plugin ls    # or 'plugin list'
[ 'org.apache.cordova.core.console' ]

删除插件

$ cordova plugin rm org.apache.cordova.core.console        
$ cordova plugin remove org.apache.cordova.core.console    # same







    
[3] 关于Parse库的配置有关问题
    来源: 互联网  发布时间: 2014-02-18
关于Parse库的配置问题

在使用Parse的一些相关服务时候,需要下载Parse的SDK,除了需要添加相应的系统框架和库的支持

AudioToolbox.framework 

CFNetwork.framework
CoreGraphics.framework
CoreLocation.framework
libz.1.1.3.dylib
MobileCoreServices.framework
QuartzCore.framework
Security.framework
StoreKit.framework
SystemConfiguration.framework


假如你更改导入其他静态库时设置了,Linking下面的Other Linker Flags(比如:我在使用芒果广告平台,配置芒果平台的静态库:点击程序Target文件,选择Build Settings标签页,找到Linking下面的Other Linker Flags,添加参 数-all_load -ObjC。)但是这和Parse静态库设置冲突需要以移除 -ObjC,否则导致如下错误


Undefined symbols for architecture i386:
  "_FBTokenInformationExpirationDateKey", referenced from:
      -[PFFacebookTokenCachingStrategy cacheTokenInformation:] in Parse(PFFacebookTokenCachingStrategy.o)
      -[PFFacebookTokenCachingStrategy expirationDate] in Parse(PFFacebookTokenCachingStrategy.o)
      -[PFFacebookTokenCachingStrategy setExpirationDate:] in Parse(PFFacebookTokenCachingStrategy.o)
  "_FBTokenInformationTokenKey", referenced from:
      -[PFFacebookTokenCachingStrategy accessToken] in Parse(PFFacebookTokenCachingStrategy.o)
      -[PFFacebookTokenCachingStrategy setAccessToken:] in Parse(PFFacebookTokenCachingStrategy.o)
  "_FBTokenInformationUserFBIDKey", referenced from:
      -[PFFacebookTokenCachingStrategy facebookId] in Parse(PFFacebookTokenCachingStrategy.o)
      -[PFFacebookTokenCachingStrategy setFacebookId:] in Parse(PFFacebookTokenCachingStrategy.o)
  "_OBJC_CLASS_$_FBRequest", referenced from:
      objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
  "_OBJC_CLASS_$_FBSession", referenced from:
      objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
  "_OBJC_CLASS_$_FBSessionTokenCachingStrategy", referenced from:
      _OBJC_CLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
  "_OBJC_METACLASS_$_FBSessionTokenCachingStrategy", referenced from:
      _OBJC_METACLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)


解决办法一:网上下载FaceBookSDK.framework,加入里面即可解决这些错误(文件比较大)

解决方法二:设置单独的静态库,使用-force_load /path/libname.a  来代替之前需要配置 -all_load _ObjC (比如下图:)





    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3