Android开发02

1,安卓应用测试

1.1,黑盒测试,在不知道软件的源代码情况下测试(门槛低一些,不需要积累太多代码量,在我个人看来,更像是找一个高情商的人来测试程序,测试临界条件,非法参数等)

1.2,白盒测试,在知道应用程序的源代码情况下测试(黑盒测试的升级版,需要懂代码,又要懂得程序的各种边界,如:购物APP中是否为购买为负数的东西,日程安排app中能否给过去的日期安排行程之类)

1.3 值得注意的是,同样的工作经验下,白盒工资要比黑盒工资更高

2,测试的力度

2.1 单元测试 junit test

2.2 集成测试 intergration test

2.3 系统测试system test

3,测试的程度

3.1 压力测试(pressure test)(如:测试服务器单位时间内能承受多少次访问)

3.2 冒烟测试(smoke test)

4,ADT自带的测试 monkey(通过adb指令)adb shell>>>monkey 次数

5,安卓下的单元测试(类似javaweb中的单元测试,但是有些配置指令要注意)

5.1需要把应用程序部署到真实的手机或者模拟器,在dalvik虚拟机里面运行.

5.2执行步骤:

5.2.1,编写一个业务方法

5.2.2,编辑一个测试类,一般以test+需要测试的类命名,需要继承extends AndroidTestCase,测试类中的方法要以public开头,并且必须抛出异常

5.2.3,在清单中配置参数

<!-- 测试的指令集 -->

配置在<manifest>标签下

<instrumentation    android:name="android.test.InstrumentationTestRunner

这里的包名是应用程序的包名

android:targetPackage="com.itheima.junit"></instrumentation>

<!--  测试需要的jar包 -->

配置在<application>标签下

<uses-library android:name="android.test.runner"/>

6.Logcat视图

6.1在android项目中,不能直接通过Console输出内容,因为这些项目是部署在手机上的,所以出现的结果是在手机上的控制台上输出,对应的是Logcat视图中信息

6.2 因为Logcat中信息比较多,所以可以在左侧Saved Filters中添加筛选信息

6.3 android中定义了一个Log类,专门用来输出日志信息,

使用场景:程序使用的流程,网络获取的信息,业务逻辑比较复杂的时候(多线程的时候就不方便使用deBug调试)

使用的时候一般都封装一个Log工具类,用一个boolean类型的变量控制,是否打印,测试的时候设置为true打印,上线的时候(提交给客户)用false就不会打印

Log.v(tag,msg); //verbose提醒

Log.d(tag,msg); //debug调试

Log.i(tag,msg); //info信息

Log.w(tag,msg); //warn 警告

Log.e(tag,msg); //error 错误

Log.wtf(tag,msg); //什么鬼,重量级错误

在Logcat中预定了筛选信息,可以直接筛选,很方便

一般都把tag定义成成员变量,里面的值为MainActivity.class.getSimpleName()(对应类的名字,方便筛选错误)

7.数据储存

7.1.文件的读写创建需要在android指定的目录

/data/data/全包名(com.zzx.xxx)/文件名,其它就是 Java的文件存储IO流

直接创建文件,会创建在储存空间的根目录下,并且是无法读取的

7.2.写法简化版

File file = new File(目录,文件名);

(getFilesDir(),”infor.txt”);

这个方法是用来返回一个绝对路径(文件系统的绝对路径,省略了this(这里的this指的是context上下文))通过上下文获取路径.

getFilesDir() ===/data/data/全包名/文件名,

7.3.上下文:应用程序运行的环境

this.getFilesDir() ===/data/data/全包名/files/文件名

this.getCaCheDir()===/data/data/全包名/cache/文件名

这两个文件夹的区别:

Cache文件夹是缓存目录,清除时不会有提示,同时储存空间满了以后,会被系统自动清空掉.

Files 文件夹是保存重要的配置信息,清除时会有提示

7.4把数据储存在外存储(sd)卡中

需要配置清单权限: WRITE_EXTERNAL_STORAGE

READ_EXTERNAL_STORAGE

sd卡路径:/mnt/sdcard/info.text //但是这个路径根据不同的文件系统(手机)路径不一样

解决方法:使用api获取:Enviroment.getExternalStorageDirectory()

需要保证代码的健壮性:尽量让程序能够独立运行,降低外部的干扰:如路径不一致,返回为空这些情况,程序都能很好的处理.

检测sd卡是否存在:

String   getExternalStorageState() 返回当前sd卡的状态

同时在Enviroment中还有一些常量:MEDIA_MOUNTED,已经安装好的sd卡

检测sd卡的可用空间

File   getExternalStorageDirectory() 返回当前sd卡的目录对象

File  getFreeSpace()(剩余空间)

File  getUsableSpace()(可用空间)都返回一个long类型的数值,代表该目录对象的大小

//最小支持的的api是9

String  Formatter.formatFileSize(this,size);返回一个String 类型的数据,代表容量大小

8 , 文件访问的权限

8.1 默认生成一个文件都是私有的,别的应用程序时无法读写的.

真实手机一般都没有root权限,所以可能是无法打开data/data/目录.

8.2 生成一个公开权限的文件

OpenFileOutput(name,mode);

Name:创建的文件名字

Mode:模式,是否全局可读,可写,默认不可读写,返回值是int类型,可以可读可写同时叠加

但是这两个常量都已经被废弃,这样创建的文件是有风险的,需要再次检查一遍(就是确认是否创建共有的文件,后面会讲到内容提供者,就能更好的去创建一个公开文件)

9,在DDMS下,查看文件资源系统,有一个项目叫Permission,可以看到对应的权限

d开头的是文件夹,-开头的是文件

rw - --- ---私有

rw- rw- rw- 公开

rw- rw- r-- 只读

rw- rw- -w- 只可写

文件的权限分为三种:创建这个文件的app:文件的所有者

文件所在的组:依赖的jar包,或者是其它应用程序,如:其它程序需要QQ授权的话,就需要让QQ能读这个文件,QQ中也有组文件,给别的文件访问.

其它用户:另外的一个app

linux中表现这个权限是用二进制表现的

如:rw- --- --- 110 000 000>>6 0 0

rw- rw- -w- 110 110 010>> 6 6 2

指令:chmod:change mode 更改文件的访问模式

通过cmd控制台 adb shell进入模拟器终端

移动到app私有文件夹Cd data/data/com.xxx.xxx/

ls -1 显示所有文件

Chmod 666 对应的文件名 修改权限

777为最高权限,可读可写,可执行

10,采用SharedPreferences保存数据(推荐)(谷歌提供的,别在java中用)

步骤:10.1,声明一个SharedPreferences ,

通过this(Context).getSharedPreferences(name,mode)获取到一个参数(类似文件对象).

Name:文件名称

Mode:一般写0,文件私有 0 =Activity.MODEXXXXXX

10.2,得到sp文件的编辑器

editor editor =sp.edit();

添加内容

editor.putString(文本名, 文本值),

editor.putString(也有其它put类型)(文本名, 文本值),

10.3,调用commit方法提交数据

editor.commit()提交数据

获取数据:怎么put数据,就怎么get出来的,也要先获得SharedPreferences对象

getString(文本名,文本不存在的时候的值)

这玩意不需要关流

11,采用SharedPreferences对象保存参数

练习:模拟系统控制中心

分割线:高度为1的View标签(View有开始也有结束,把属性写在开始标签里)

CheckBox方法:点击状态监听,isChecker布尔类型,是否被点击

setOnCheckedChangeListener()

SeekBar控件方法:拖动监听(开始拖动,结束拖动,正在拖动中)

setOnSeekBarChangeListener()

getProgress()获取拖动状态值,int数

12,xml序列化(serializer.attribute(命名空间.属性名.属性值)可以设置属性)

CheckedRadio方法 :getCheckedRadioButtonId()获得被选中的id

1,获取xml序列化器对象

Xml.newSerializer();

2,指定序列化器的初始参数

FileOutputStream os  = new os(getFilesDir(),name+”.xml”);

serializer.setOutput(os,编码)

//3,开始写文件,生成开始结束标签,生成文本内容

serializer.startDocument(“utf-8”,是否独立(有无外部约束文件));

serializer.startTag(null,”属性名”);

Serializer.text(属性值);

serializer.endTag(null,”属性名”);

serializer.endDocument();

13,pull解析xml文件(javaweb有说过)(不过adt中已经集成了pull解析,所以不需要第三方jar包了)

其它解析:SAX解析,DOM解析,DOM4J解析

步骤:

①,获取到一个解析器

XmllPullParser xpp = Xml.newpullparser();

②,设置初始化参数

xpp.setInput(inputStream,encoding);

③解析文件

根据节点解析文件

XmllPullParser.START_TAG 开始节点

XmllPullParser.END_TAG 结束节点

Xpp.next()解析到下一个节点

xpp.getName()获取当前节点的名称

xpp.nextText()获取两个节点中的文本

  

14,其它,错误调试,debug,略

附 帮助文档中的pull解析示例

import java.io.IOException;
 import java.io.StringReader;

 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlPullParserFactory;

 public class SimpleXmlPullApp
 {

     public static void main (String args[])
         throws XmlPullParserException, IOException
     {
         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         factory.setNamespaceAware(true);
         XmlPullParser xpp = factory.newPullParser();

         xpp.setInput( new StringReader ( "<foo>Hello World!</foo>" ) );
         int eventType = xpp.getEventType();
         while (eventType != XmlPullParser.END_DOCUMENT) {
          if(eventType == XmlPullParser.START_DOCUMENT) {
              System.out.println("Start document");
          } else if(eventType == XmlPullParser.START_TAG) {
              System.out.println("Start tag "+xpp.getName());
          } else if(eventType == XmlPullParser.END_TAG) {
              System.out.println("End tag "+xpp.getName());
          } else if(eventType == XmlPullParser.TEXT) {
              System.out.println("Text "+xpp.getText());
          }
          eventType = xpp.next();
         }
         System.out.println("End document");
     }
 }
时间: 2024-10-11 18:01:51

Android开发02的相关文章

android下apkplug通用主题(皮肤)切换解决方案之主题包开发-02

该文章是基于apkplug V1.6.8 进行说明的 我们提供了一个demo做为参考,项目下载地址为:http://git.oschina.net/plug/IMThemeDemo 该 IMThemeDemo 实现了简单的聊天泡泡切换功能,同时主题包(插件)是托管在apkplug的云服务器上的.所以要阅读项目的完整代码可以先看插件托管服务开发系列文章 <插件托管服务开发指南> demo运行效果图: 上一篇文章我们实现了主应用的开发,本篇应用我们开发主题包(插件). 一,主题包说明 apkplu

0-2岁的app开发人员必读,Android开发APP前的准备事项

随着移动互联网的兴起,各行各业对移动应用的需求越来越大,从事APP开发的人也越来越多,APP开发行业可以说是方兴未艾.APP开发是比较复杂的事情,涉及产品.美工设计.服务器端开发.Android/iOS开发.软件测试和项目管理等各方面.这些方面都是相互关联的,如果要做好一个APP,需要对上述各方面都有所了解. 在实际工作中,许多从别的行业转行从事APP开发或从事APP开发一两年的人员,对APP开发的基础知识不甚了解,需要关注的地方都没有考虑到,导致在开发APP的过程中犯了许多低级错误,而这些本来

Android开发最佳学习路线图

      为了帮助大家更好的学习Android开发的相关知识,尚观4G智能操作系统研究室(www.up4g.com)为大家制作下面学习路线图:希望能帮助到广大的android爱好者. 在開始之前我们先来对相关知识进行一个简单的了解:   行业背景: 今天,涉及通信产业链中的每一个环节,都有Android的身影,Android是第一款全然完整打通了整个通信产业链中的操作系统,手机方案商.集成商.运营商.内容提供商.用户,都在玩Android,都吃惊于Android的爆发式增长速度,Android

Android开发资源推荐第2季

Android CPU监控想法,思路,核心技术和代码 http://www.csdn123.com/html/blogs/20131026/89017.htm Android App /Task/Stack 总体分析 http://www.eoeandroid.com/thread-161703-1-1.html Android Widget设计指南 http://mobile.51cto.com/widget-248860_all.htm 系统深入学习android http://www.cn

关于Android开发环境搭建

想比较清楚详细地介绍下新手进行Android开发搭建环境的问题,网上已经有很多这方面的内容了,但是我想从稍微不一样的角度来进行阐述. 思考开发Android应用需要哪些东西呢?首先,Android开发使用的是Java语言,因此安装JDK(Java Development Kit),并设置好环境变量.其次,就是为了编写Android应用程序,在这个过程中需要进行Android开发必需的库文件(由Google提供,这应该就是Android开发SDK的一部分了吧).编译和调试工具. 初步一想就是这些东

Android开发之资源文件存储

本文介绍在Android开发中关于资源文件的存储操作.对于Android资源也是非常重要的,主要包括文本字符串(strings).颜色(colors).数组(arrays).动画(anim).布局(layout).图像和图标(drawable).音频视频(media)和其他应用程序使用的组件. 在Android开发中,资源文件是我们使用频率最高的,无论是string,drawable,还是layout,这些资源都是我们经常使用到的,而且为我们的开发提供了很多方便,不过我们平时接触的资源目录一般都

CSharp程序员学Android开发---3.Android内部元素不填充BUG

最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历时一个多月,4个人开发,最终行成一个可用的Demo,整体效果还非常不错.这其中借鉴了网上的“仿网易客户端的Demo”还有就是学习<疯狂Android>,收获颇多,这里利用几篇文章做一个项目经验总结,还有就是更多的从C# 程序员的观点来理解Android的一些异同之处. 文章目录: CSharp程序

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的

[转]Ubuntu 配置 Android 开发 环境

转自:http://blog.csdn.net/shulianghan/article/details/20855541 1. 安装 Android Studio (1) 下载Android Studio开发环境 下载地址 : http://developer.android.com/sdk/installing/studio.html , Windows 和 Linux 不分 32 位 和 64 位; -- Windows版 : https://dl.google.com/android/st