ios和Android更新检测

ios和Android更新检测
ios和Android更新检测

一ios软件更新提示

1)服务器接口,

通常的做法是在自己的服务器上记录最新版本号,从iOS客户端请求,与本地版本号比较,不同则提示更新。这种做法简单,缺点是需要单独的服务器支持。

2)Appstore的接口?

不需要另外的服务器支持,方法最优

NSString *version = @"";

NSURL *url = [NSURL URLWithString:@"https://www.360docs.net/doc/e112676752.html,/lookup?id="];

versionRequest = [ASIFormDataRequest requestWithURL:url];

[versionRequest setRequestMethod:@"GET"];

[versionRequest setDelegate:self];

[versionRequest setTimeOutSeconds:150];

[versionRequest addRequestHeader:@"Content-Type" value:@"application/json"];

[versionRequest startSynchronous];

//Response string of our REST call

NSString* jsonResponseString = [versionRequest responseString];

NSDictionary *loginAuthenticationResponse = [jsonResponseString objectFromJSONString];

NSArray *configData = [loginAuthenticationResponse valueForKey:@"results"];

for (id config in configData)

{

version = [config valueForKey:@"version"];

}

//Check your version with the version in app store

if (![version isEqualToString:[itsUserDefaults objectForKey:@"version"]])

{

ProAlertView *createUserResponseAlert = [[ProAlertView alloc] initWithTitle:@"New Version!!" message: @"A new version of app is available to download" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles: @"Download", nil];

[createUserResponseAlert show];

[createUserResponseAlert release];

}

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

// the user clicked one of the OK/Cancel buttons

if (buttonIndex == 1)

{

NSString *iTunesLink = @"itms-apps://https://www.360docs.net/doc/e112676752.html,/WebObjects/MZStore.woa/wa/viewSoftwareUpdate?id=&mt=8";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

}

}

二android版本升级提示

步骤:

1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName。

2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹配,提示用户进行升级,如果匹配则进入程序主界面。

3.当提示用户进行版本升级时,如果用户点击了确定,系统将自动从服务器上下载并进行自动升级,如果点击取消将进入程序主界面。

效果图:

1.获取当前程序的版本号

/*

* 获取当前程序的版本号

*/

private String getVersionName() throws Exception{

//获取packagemanager的实例

PackageManager packageManager = getPackageManager();

//getPackageName()是你当前类的包名,0代表是获取版本信息

PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(), 0);

return packInfo.versionName;

}

2.获取服务器端的版本号

/*

* 用pull解析器解析服务器返回的xml文件 (xml封装了版本号)

*/

public static UpdataInfo getUpdataInfo(InputStream is) throws Exception{ XmlPullParser parser = Xml.newPullParser();

parser.setInput(is, "utf-8");//设置解析的数据源

int type = parser.getEventType();

UpdataInfo info = new UpdataInfo();//实体

while(type != XmlPullParser.END_DOCUMENT ){

switch (type) {

case XmlPullParser.START_TAG:

if("version".equals(parser.getName())){

info.setVersion(parser.nextText()); //获取版本号

}else if ("url".equals(parser.getName())){

info.setUrl(parser.nextText()); //获取要升级的APK文件

}else if ("description".equals(parser.getName())){

info.setDescription(parser.nextText()); //获取该文件的信息

}

break;

}

type = parser.next();

}

return info;

}

3.从服务器下载apk

public static File getFileFromServer(String path, ProgressDialog pd) throws Exception{ //如果相等的话表示当前的sdcard挂载在手机上并且是可用的

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(5000);

//获取到文件的大小

pd.setMax(conn.getContentLength());

InputStream is = conn.getInputStream();

File file = new File(Environment.getExternalStorageDirectory(), "updata.apk");

FileOutputStream fos = new FileOutputStream(file);

BufferedInputStream bis = new BufferedInputStream(is);

byte[] buffer = new byte[1024];

int len ;

int total=0;

while((len =bis.read(buffer))!=-1){

fos.write(buffer, 0, len);

total+= len;

//获取当前下载量

pd.setProgress(total);

}

fos.close();

bis.close();

is.close();

return file;

}

else{

return null;

}

}

4.匹配、下载、自动安装

/*

* 从服务器获取xml解析并进行比对版本号

*/

public class CheckVersionTask implements Runnable{

public void run() {

try {

//从资源文件获取服务器地址

String path = getResources().getString(R.string.serverurl);

//包装成url的对象

URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(5000);

InputStream is =conn.getInputStream();

info = UpdataInfoParser.getUpdataInfo(is);

if(info.getVersion().equals(versionname)){

Log.i(TAG,"版本号相同无需升级");

LoginMain();

}else{

Log.i(TAG,"版本号不同 ,提示用户升级 ");

Message msg = new Message();

msg.what = UPDATA_CLIENT;

handler.sendMessage(msg);

}

} catch (Exception e) {

// 待处理

Message msg = new Message();

msg.what = GET_UNDATAINFO_ERROR;

handler.sendMessage(msg);

e.printStackTrace();

}

}

}

Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

super.handleMessage(msg);

switch (msg.what) {

case UPDATA_CLIENT:

//对话框通知用户升级程序

showUpdataDialog();

break;

case GET_UNDATAINFO_ERROR:

//服务器超时

Toast.makeText(getApplicationContext(), "获取服务器更新信息失败", 1).show();

LoginMain();

break;

case DOWN_ERROR:

//下载apk失败

Toast.makeText(getApplicationContext(), "下载新版本失败", 1).show();

LoginMain();

break;

}

}

};

/*

*

* 弹出对话框通知用户更新程序

*

* 弹出对话框的步骤:

* 1.创建alertDialog的builder.

* 2.要给builder设置属性, 对话框的内容,样式,按钮

* 3.通过builder 创建一个对话框

* 4.对话框show()出来

*/

protected void showUpdataDialog() {

AlertDialog.Builder builer = new Builder(this) ;

builer.setTitle("版本升级");

builer.setMessage(info.getDescription());

//当点确定按钮时从服务器上下载新的apk 然后安装

builer.setPositiveButton("确定", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

Log.i(TAG,"下载apk,更新");

downLoadApk();

}

});

//当点取消按钮时进行登录

builer.setNegativeButton("取消", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

LoginMain();

}

});

AlertDialog dialog = builer.create();

dialog.show();

}

/*

* 从服务器中下载APK

*/

protected void downLoadApk() {

final ProgressDialog pd; //进度条对话框

pd = new ProgressDialog(this);

pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

pd.setMessage("正在下载更新");

pd.show();

new Thread(){

@Override

public void run() {

try {

File file = DownLoadManager.getFileFromServer(info.getUrl(), pd);

sleep(3000);

installApk(file);

pd.dismiss(); //结束掉进度条对话框

} catch (Exception e) {

Message msg = new Message();

msg.what = DOWN_ERROR;

handler.sendMessage(msg);

e.printStackTrace();

}

}}.start();

}

//安装apk

protected void installApk(File file) {

Intent intent = new Intent();

//执行动作

intent.setAction(Intent.ACTION_VIEW);

//执行的数据类型

intent.setDataAndType(Uri.fromFile(file),

"application/vnd.android.package-archive");

startActivity(intent);

}

/*

* 进入程序的主界面

*/

private void LoginMain(){

Intent intent = new Intent(this,MainActivity.class);

startActivity(intent);

//结束掉当前的activity

this.finish();

}

5.Updatainfo

public class UpdataInfo {

private String version;

private String url;

private String description;

public String getVersion() {

return version;

}

public void setVersion(String version) {

this.version = version;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

}

6.update.xml

2.0

http://192.168.1.187:8080/mobilesafe.apk

检测到最新版本,请及时更新!

https://www.360docs.net/doc/e112676752.html,/blog/1513076

Android adb(调试桥)的应用及操作命令 有米分享

Android adb(调试桥)的应用及操作命令 试阅: ……Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到日志信息,你需要通过-b 选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的循环缓冲期: ?radio —查看缓冲区的相关的信息. ?events —查看和事件相关的的缓冲区. ?main —查看主要的日志缓冲区 -b 选项使用方法: [adb] logcat [-b ] 下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息: adb logcat -b radio 查看stdout 和stderr 在默认状态下,Android系统有stdout 和 stderr (System.out 和System.err )输出到/dev/null ,在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用stdout 和stderr 和优先级 I.来记录日志信息 通过这种方法指定输出的路径,停止运行的模拟器/设备,然后通过用 setprop 命令远程输入日志 $ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start 系统直到你关闭模拟器/设备前设置会一直保留,可以通过添加 /data/local.prop 可以使用模拟器/设备上的默认设置 Logcat命令列表 Option Description -b 加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers. -c 清楚屏幕上的日志.

IOS与android手机系统区别

浅谈IOS与android IOS: 2007年推出,属于类Unix的商业操作系统,用Objective-c编写,拥有较多优雅之处,系统结构分为以下四个层次:核心操作系统(the Core OS layer),核心服务层(the Core Services layer),媒体层(the Media layer),Cocoa 触摸框架层(the Cocoa Touch layer)。核心理念就是“应用为王”. IOS 4.0观点: 1.界面和分辨率的统一性 2. 软件商店分级与分类细致 3. 塑造了良好的开发环境 4. 提供云服务与设备的互动 Android: 2008年首次推出,是一种基于Linux的自由及开放源代码的操作系统,主要使用于便携设备,如智能手机和平板电脑。系统结构分为以下四个层次:应用程序层、应用程序框架层、系统运行库层和linux 核心层。核心理念就是“开源” Android 2.3观点: 1. Android将成为智能手机份额第一 2. Android是真正的多任务系统 3. Android安装程序更简单 4. android吸引众多终端厂商

大体功能一览表:

下面我们分开来看看它们系统具体优于对方什么. 一.IOS优势于android分析: iOS设备时便能够确切地知道可以从中得到什么;当可以进行主要功能的升级时,你可以从清晰的计划表中获得相关信息,升级内容的差异最多也只存在于手机和平板电脑之间。而Android则不同,它的差异不仅体现在手机和平板产品之间,就连各种版本的手机之间也是千差万别。IOS完美的流畅性源于系统编程语 言以及细心所带来的优势(用户界面渲染的过程被赋予了很高的优先级,当触摸屏开始 操作,系统将停止所有进程,将所有资源集中对节目进行渲染),这个是android的一直以来的目标。 精美的设计。苹果设计的界面,不管是外观还是易用性,都饱含了体贴细致的理念。人们往往可以迅速掌握iOS设备,甚至很多小孩子都在熟练使用iPad。相比之下Android则稍微欠缺。 近70万的IOS应用,严格控制第三方应用,需要通过审批, 且大多数收费应用带来的是: 一是开发人员能因此获得收益,以促使他们的程序开发工作进入良性循环; 二是将会吸引更多的大牌游戏开发商开发出优秀产品,为用户提供更优质的服务. 比起android通过软件内部广告收费,当然更胜一筹.

ios和Android APP设计规范要点

相信很多人都在开发设计APP时会遇到很多界面上的问题,要以多大尺寸来设计?分辨率是多少?该怎么切图给开发等等 下面的文字就给出一点点技巧总结,但也要给合团队在开发时的习惯。每个工程师们所使用的控件,书写布局习惯来实际移交的图是不一样的,但八九不离十,都是遵循一个原则,便捷开发、自适应强的开发模式 IOS篇 一、尺寸及分辨率 iPhone界面尺寸:320*480、640*960、640*1136 iPhone6:4.7英寸(1334×750),iPhone6 Plus:5.5英寸(1920×1080) 设计图单位:像素72dpi。在设计的时候并不是每个尺寸都要做一套,尺寸按自己的手机来设计,比较方便预览效果,一般用640*960或者640*1136的尺寸来设计,现在iphone6和plus出来后有很多人会使用6的设计效果。 如果是我来做的话,我会使用640×1136,对plus做单独的修改适配,因为plus的屏幕实在是大了,遵循屏大显示更多内容的原则这里本应该是需要修的了。有更好办法的话希望大家可以分享一下。 Ps:作图的时候确保都是用形状工具(快捷键:U)画的,这样更方便后期的切图或者尺寸变更。 二、界面基本组成元素

iPhone的app界面一般由四个元素组成,分别是:状态栏(status bar)、导航栏(navigation)、主菜单栏(submenu)、内容区域(content)。 这里取用640*960的尺寸设计,那我们就说说在这个尺寸下这些元素的尺寸。 状态栏(status bar):就是我们经常说的信号、运营商、电量等显示手机状态的区域,其高度为:40px 导航栏(navigation):显示当前界面的名称,包含相应的功能或者页面间的跳转按钮,其高度为:88px 主菜单栏(submenu,tab):类似于页面的主菜单,提供整个应用的分类内容的快速跳转,其高度为:98px 内容区域(content):展示应用提供的相应内容,整个应用中布局变更最为频繁,其高度为:734px 至于我们经常说的iPhone5/5s的640*1136的尺寸,其实就是中间的内容区域高度增加到910px。

在Eclipse上调试Android应用程序

在Eclipse上调试Android应用程序 以前一直用VC开发,VC开发工具调试程序非常简单,按F7源码编译通过后,按F5就开始调试了。为了开发Android程序,使用Eclipse开发环境,刚接触Eclipse不久,对Eclipse 环境不够熟悉,在这之前开发Android程序都是通过Trace定位问题的,后来得知Eclipse也可以进行单步调试,经过动手试验,发现调试过程类似VC开发环境,下面是调试步骤: 1. 首先启动Eclipse,启动Android模拟器 2. 打开DDMS界面,选择要调试的设备,并指定要调试的进程,例如: 3.设置好断点,打开调试界面,按F11开始调试,可以F6进行单步调试。 ******************************** DDMS 的全称是Dalvik Debug Monitor Service,是Android 开发环境中的Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。 在集成开发环境中,有DDMS控制台窗口。如,MyEclipse中,有个叫DDMS的Console。 1.如何启动DDMS 这个工具存放在SDK-tools路径下,启动方法: 1) 直接双击ddms.bat运行; 2) 在Eclipse调试程序的过程中启动DDMS,在Eclipse如下: Window-Open Perspective-DDMS,点击启动就可以了 DDMS对Emulator和外接测试机同等效用,如果系统检测到它们(VM)同时运行,那么DDMS 将会默认指向Emulator,以上两种启动后的操作有些不一样,建议分别尝试下; (WGY-Dalvik:虚拟机;Monitor:监听器)

(完整word版)ios与android系统架构

系统包(运行架构) Android Ios Android系统的优先级响应层级是Application(应用层)--Framework(框架层)--Library (运行库及显示)--Kernal(内核层)架构,和显示相关的图形图像处理这一部分属于Library,可以看到到第三位才是它,当触摸屏幕之后Android系统首先会激活应用,框架然后才是屏幕最后是核心架构。 iOS对屏幕反应的优先级是最高的,它的响应顺序依次为Touch(触摸显示)--Media(媒体)--Service(服务)--Core(内核)架构,换句话说当用户只要触摸接触了屏幕之后,系统就会最优先去处理屏幕显示也就是Touch这个层级,然后才是媒体(Media),服务(Service)以及Core架构。 应用程序框架层

Linux内核层 Android是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程Android 内核分析 一、内核在操作系统中的地位 Android基于Linux操作系统由硬件、系统内核、系统服务和应用程序等四大部分组成。其中内核是核心的部分,其主要作用在于与计算机硬件进行交互实现对硬件的编程控制和接口操作调度访问硬件资源同时向应用程序提供一个高级的执行环境和对硬件的虚拟接口。主要功能包括中断服务程序、进程调度程序、进程地址空间的内存管理、进程间通信。内核与普通应用程序不同,其拥有所有硬件设备的访问权限以及启动时即划分的受保护的内存空间。 二、Android内核和标准的Linux内核一样,Android内核主要实现内存管理、进程调度、进程间通信等功能。 Android内核是在标准Linux内核的基础上修改而成。为了适应嵌入式硬件环境和移动应用程序的开发Android对标准Linux内核进行了一定的修改。经过与标准Linux内核源代码进行详细对比可以发现Android内核与标准Linux内核在文件系统、进程间通信机制、内存管理等方面存在不同。 文件系统不同于桌面系统与服务器,移动设备大多采用的不是硬盘而是采用Flash作为存储介质,因此Android内核中增加了标准Linux内核中没有采纳的YAFFS2文件系统。 YAFFS2按层次结构设计分为文件管理接口、内部实现层和NAND简化了其本身与系统的接口设计能更方便地集成到系统当中。 进程间通信机制Android增加了一种进程间的通信机制IPCBinder,Binder通过守护进程ServiceManager管理系统中的服务,负责进程间的数据交换。各进程通过Binder访问同一块共享内存以达到数据通信的机制。从应用层的角度看进程通过访问数据守护进程获取用于数据交换的程序框架接口,调用并通过接口共享数据,而其他进程要访问数据也只需与程序框架接口进行交互方便了程序员开发需要交互数据的应用程序。 内存管理在内存管理模块Android内核采用了一种不用于标准Linux内核的低内存管理策略。在标准Linux内核当中使用一种叫做OOM(OutofMemory)的低内存管理策略,当内存不足时系统检查所有的进程并对进程进行限制评分获得最高分的进程将被关闭。Android新增加了一种内存共享的处理方式Ashmem。通过Ashmem进程间可以匿名自由共享具名的内存块这种共享方式在标准Linux当中不被支持。经过分析Android内核由标准Linux内核修改而来,因此继承了Linux内核的各种优点保留了标准Linux内核的主体架构。 同时Android按照移动设备的需求在文件系统、内存管理、进程间通信机制、电源管理等方面进行了修改添加相关的驱动程序和一些必要的新功能,但是与大多数精简的嵌入式Linux操作系统相比Android很大程度上保留了标准Linux的基本架构,因此Android系统应用范围更加广泛拓展性更强。

Android的调试打印接口分析

Android的调试打印接口分析 Android输出Log可以通过使用Android.util中的Log类来实现。android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及Log.e() 。根据首字母对应VERBOSE、DEBUG、INFO、WARN、ERROR。例如,在执行下面的代码后,会输出Log到LogCat View 里: Log.v("tag", "message"); Java中原有的打印语句System.out.println()的打印也会被输出到LogCat,它的Tag标签是” System.out” 在Eclipse下会通过如下的窗口显示: 在机顶盒命令模式下,则需要执行logcat命令在串口输出打印(或者将打印输出到指定文件)。 1、使用android.util.log的优点 1)功能强大,使用方便 Logcat可以根据调试级别输出不同等级的信息(VERBOSE,DEBUG,INFO, WARN,ERROR),而且可以过滤输出指定tag的调试信息; 2)系统自动添加调试信息,定位问题快捷 程序异常退出、强制关闭、长时间无响应时,系统会自动生成log打印。包括系统基本信息(内存,CPU ,进程队列,虚拟内存,垃圾回收等)、时间信息和虚拟机信息(包括进程的,线程的跟踪信息)。 2、使用android.util.log的缺点 中间件其它模块的打印最后统一由rocme_porting_dprintf()实现,独独android的java输出使用了自己的底层实现(调用Linux的write( int fildes, const void* buf,size_t nbyte )),不够统一。 3、Android中Java打印在底层改由rocme_porting_dprintf()实现的优点 中间件打印最后统一由rocme_porting_dprintf()实现,这样只需修改porting就可以实现打印的开关、打印终端的控制(串口、控制台……)。 4、Android中Java打印改由rocme_porting_dprintf()实现的缺点 1)Android log原有的输出等级控制和输出过滤的功能将丧失,Android内部C和C++实现中用LOGV、LOGD、LOGI等分等级输出的打印将全部会输出,除非rocme_porting_dprintf()也实现分等级输出的功能; 2)Android在运行Java应用的时候,会将每个进程的标准输出sdtout等重定向到/dev/log/下的三个文件(main、radio、events)中进行缓存,执行logcat命令后再重定向到串口进行输出。若改用rocme_porting_dprintf(),则需要其实现将每个进程的标准输出sdtout重定向,

Android常用调试工具

Android问题分析工具 Android应用开发过程中,会遇到各种各样的问题。好的分析方法和分析工具,能起到事半功倍的效果。下面是几个常用的小工具,希望能对大家有所帮助。 1. 查看当前堆栈 1) 功能:在程序中加入代码,使可以在logcat中看到打印出的当前函数调用关系 2) 方法: new Exception(“print trace”).printStackTrace(); 2. MethodTracing 1) 功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函 数调用关系等 2) 方法: a) 在程序代码中加入追踪开关 1. import Android.os.Debug; 2. …… 3. Android.os.Debug.startMethodTracing(“/data/tmp/test”); // 先 建/data/tmp目录 4. …… // 被追踪的程序段 5. Android.os.Debug.stopMethodTracing(); b) 编译,运行后,设备端生成/data/tmp/test.trace文件 c) 把trace文件复制到PC端 1. $ adb pull /data/tmp/test.trace ./

d) 使用Android自带工具分析trace文件 1. $ $Android_SRC/out/host/linux-x86/bin/traceview test.trace 此时可看到各个函数被调用的次数CPU占用率等信息 e) 使用Android自带工具分析生成调用关系类图 1. $ apt-get install graphviz # 安装图片相关软件 2. $Android_SRC/out/host/linux-x86/bin/dmtracedump -g test.png test.trace 此时目录下生成类图test.png 3) 注意 trace文件生成与libdvm模块DEBUG版本相冲突,所以此方法只适用于对非DEBUG 版 本模拟器的调试,否则在分析trace文件时会报错 3. HProf (Heap Profile) 1) 功能: 用于java层面的内存分析,显示详细的内存占用信息,指出可疑的内存泄漏对象 2) 方法: a) 在代码中加入dump动作 1. import Android.os.Debug; 2. import java.io.IOException; 3. …… 4. try { 5. Android.os.Debug.dumpHprofData(“/data/tmp/input.hprof”); // 先 建/data/tmp目录 6. } catch (IOException ioe) { 7. } b) 把hprof文件复制到PC端 1. $ adb pull /data/tmp/input.hprof ./

计算机与手机操作系统现状分析 —— 基于Android与iOS系统的比较

---------------------------------------------装--------------------------------- --------- 订 -----------------------------------------线---------------------------------------- 班级 10 金融工程1班 姓名 黄景豪 学号 10250502104 -

计算机与手机操作系统现状分析 ——基于Android与iOS系统的比较------------------------------------------------------------------------------------------------------------------------------------摘要:近年来,移动设备操作系统的竞争越演越热,本文通过研究目前市场中最为热门的Android系统和iOS系统的设计理念,用户界面,系统功能等来透析现有移动互联网操作系统的优缺点,来探索到未来移动互联网操作系统的影子和发展方向。同时以预测这两个系统在未来的市场表现并为国内相关企业提供一些创新的基本思路。 关键词:手机操作系统Android iOS 现状分析创新模式 1引言 2007年6月,苹果公司发布的使用iOS系统的iPhone智能手机,被证实真正的挖掘了智能手机所被人们忽略的潜能。由于iPhone的过于出色,将移动手机巨头摩托罗拉公司挤到破产边缘。而拥有Symbian系统,如日中天的诺基亚,在仅仅4年内,市值从2007年的1100亿欧元缩水到148亿欧元,也濒临破产危机。诺基亚新CEO斯蒂芬埃洛普表示:“现在的诺基亚真正成为了一个着火的平台。”iPhone的成功只是拉开了移动互联网时代的面纱,它带来的不仅仅是苹果公司10亿美元的销售额,还直接点燃了所有IT巨头对于被誉为是移动互联网未来的这块新蛋糕的争夺战。 同年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统,一款基于Linux的自由及开放源代码的操作系统。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。摩托罗拉通过分离旗下的移动手机部门,投靠Google着手生产Android系统智能手机挽回败局,重新在市场上占有一席之地。 在当下,硬件已经不是核心竞争力,软件,也就是我们所谓的操作系统成为了战争的主角。在接下来的章节中,本文将对这两款操作系统进行剖析。 2操作系统简介 操作系统(Operating System)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作

android调试桥(adb)常用命令

Android 调试桥(adb)是多种用途的工具,该工具可以帮助你管理设备或模拟器的状态。 可以通过下列几种方法加入adb: ?在设备上运行shell命令 ?通过端口转发来管理模拟器或设备 ?从模拟器或设备上拷贝来或拷贝走文件 下面对adb进行了介绍并描述了常见的使用. Contents 概要 发出adb命令 查询模拟器/设备实例 给特定的模拟器/设备实例发送命令 安装软件 转发端口 从模拟器/设备中拷入或拷出文件 Adb命令列表 启动shell命令 通过远程shell端运行sqllite3连接数据库 UI/软件试验程序Monkey 其它的shell命令 启用logcat日志 使用logcat命令 过滤日志输出 控制日志输出格式 查看可用日志缓冲区 查看stdout 和stderr Logcat命令列表 停止adb服务 概要 Android 调试系统是一个面对客户服务系统,包括三个组成部分: ?一个在你用于开发程序的电脑上运行的客户端。你可 以通过shell端使用adb命令启动客户端。其他 Android工具比如说ADT插件和DDMS同样可以产 生adb客户端. ?在你用于发的机器上作为后台进程运行的服务器。该 服务器负责管理客户端与运行于模拟器或设备上的 adb守护程序(daemon)之间的通信。.

?一个以后台进程的形式运行于模拟器或设备上的守 护程序(daemon)。. 当你启动一个adb客户端,客户端首先确认是否已有一个adb服务进程在运行。如果没有,则启动服务进程。当服务器运行,adb服务器就会绑定本地的TCP端口5037并监听adb客户端发来的命令,—所有的adb客户端都是用端口5037与adb服务器对话的. 接着服务器将所有运行中的模拟器或设备实例建立连接。它通过扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备。一旦服务器找到了adb守护程序,它将建立一个到该端口的连接。请注意任何模拟器或设备实例会取得两个连续的端口——一个偶数端口用来相应控制台的连接,和一个奇数端口用来响应adb连接。比如说: 模拟器1,控制台:端口5554 模拟器1,Adb端口5555 控制台:端口5556 Adb端口5557... 如上所示,模拟器实例通过5555端口连接adb,就如同使用5554端口连接控制台一样. 一旦服务器与所有模拟器实例建立连接,就可以使用adb命令控制和访问该实例。因为服务器管理模拟器/设备实例的连接,和控制处理从来自多个adb客户端来的命令,你可以通过任何客户端(或脚本)来控制任何模拟器或设备实例. 以下的部分描述通过命令使用adb和管理模拟器/设备的状态。要注意的是如果你用,装有ADT 插件的Eclipse开发Android程序,你就不需要通过命令行使用adb。ADT插件已经透明的把adb集成到Eclipse中了,当然,如果必要的话你也可以仍然直接使用adb,比如说调试. 发出adb命令 发出Android命令:你可以在你的开发机上的命令行或脚本上发布Android命令,使用方法: adb [-d|-e|-s ] 当你发出一个命令,系统启用Android客户端。客户端并不与模拟器实例相关,所以如果双服务器/设备是运行中的,你需要用-d选项去为应被控制的命令确定目标实例。关于使用这个选项的更多信息,可以查看模拟器/设备实例术语控制命令 . 查询模拟器/设备实例 在发布adb命令之前,有必要知道什么样的模拟器/设备实例与adb服务器是相连的。可以通过使用devices命令来得到一系列相关联的模拟器/设备: adb devices ?作为回应,adb为每个实例都制定了相应的状态信息: ??序列号——由adb创建的一个字符串,这个字符串 通过自己的控制端口-

ios操作系统与安卓系统对比的优势教学文稿

i o s操作系统与安卓 系统对比的优势

ios操作系统与安卓系统对比的优势 Android抗衡iOS还是有些力不从心,比如在移动应用开发者的收入方面,平台的整合度,操作的流畅度等。尤其在企业级市场,几乎已被iOS全面占领,新兴的企业都表示更加青睐iOS而非所谓“开放”、基于Linux内核、拥有双核甚至四核……的Android设备。 企业级用户对稳定和实时性的需求恰恰就是Android的软肋,网络上一个段子很能表现Android的窘境:“Android用户三大爱好:刷机重启换电池”,还有人出来解释“为什么Android永远不会比iOS流畅”,并称Android是本着学、赶、超的思路诞生并发展起来,在黑莓时代Android设备最早是按照全键盘机型作为参考,后来iPhone的横空出世才导致Android瞬间改头换面,于是为后面的图形渲染等等埋下了隐患。 Android是第一个内置支持Java的操作系统,Android应用程序使用Java语言编写。Android开发水平的高低很大程度上取决于Java语言核心能力是否扎实。iOS苹果的iPhone和iPad应用开发都指定使用同一开发语言:Objective-C 语言。Objective-C是Cocoa的本地编程语言,Coaco框架和大多数应用程序都使用该语言编写而成。但是也可以使用Python、Ruby等其他编程语言开发应用程序,并且此种开发方式也可使用Cocoa框架。 系统特性: 1、与硬件整合度高:使用起来更加流畅;不支持Flash,但可以使用第三方程式Jailbreak观看。 2、通知中心:苹果在iOS5上改变了通知中心的形式。在新的通知中心中,提示不会再像以前那样弹出,而是像Android系统那样出现在屏幕上方。你可以下拉这个菜单,选择自己想查看的信息。不会再被弹出的信息打扰还是件很令人舒服的改变。

android与ios对比分析

Android与ios对比分析 (武汉科技大学计算机科学与技术学院,湖北武汉) 摘要:本文主要对比分析Android和ios两种主要用于移动通讯设备上的操作系统的区别。本文着重介绍了Android和ios的系统架构,并对两者进行了对比。同时也介绍了两种操作系统对于开发者和用户的体验上的区别。最后对两种的市场占有做了对比和预测。 关键词:android,ios,系统架构,对比分析 1. 引言 自iPhone在07年初次登台将智能手机直接带向移动互联时代后,一方面智能手机普及率直线上升,另一方面整个市场目前呈现了iPhone与Android手机两强争霸的局面。 iOS是由苹果公司开发的手持设备操作系统。最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV 等苹果产品上。它也是以Darwin为基础的,因此同样属于类Unix 的商业操作系统。 Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。至目前为止,android跃居全球最受欢迎的智能手机平台。 在便携式设备领域,ios和android分别的优势和劣势也日益明显。

2. Android与IOS系统架构对比 2.1 Android系统架构 Android系统架构为四层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,见图2.1分别介绍如下: 图2.1 1)应用程序层 Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序。这些应用程序都是用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个性化。 2)应用程序框架层 应用程序框架层是我们从事Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能的,该层简化了组件的重用,开发人员可以直接使用其提供的组件来进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。

android虚拟机和调试

Android虚拟机安装和调试简单教程 虚拟机选择 随着google被墙,安装安卓虚拟机真的是非常困难,你可能试过离线下载和在线下载,但是都是比较困难。Genymotion工具就是提供了Android虚拟环境,能够让我们快速安装和使用,同时在Eclipse中安装插件也可以让自己开发的程序运行在Genymotion的Android虚拟机 Genymotion安装 注册登录 进入Genymotion官网,点击下载按钮,这里必须要输入邮箱。如果是已经注册过直接输入邮箱即可。 如果未注册,输入邮箱和两次密码后,系统会发送一封邮件到你邮箱,请一定要去验证后在进行下一步下载。 注意:一定要进行验证。 1.下载 因为Genymotion运行需要VirtualBox,如果电脑中没安装过,选这个版本。这个版本包含Oracle VirtualBox 4.2.12支持,因此您不用再手动下载安装VirtualBox。

1.如果已经安装过VirtualBox,选择这个版本 2.运行安装Genymotion 双击运行下载的Genymotion安装文件,选择中文语言并点击下一步,下一步

3.可更改安装路径,点击浏览Browse.. 软件默认的路径为C:\Program Files\Genymobile\Genymotion 然后下一步

4.在弹出框选择是否创建快捷菜单[Don't create a Start Menu folder] 点击下一步 5.在弹出框选择是否创建桌面快捷方式[Create a desktop icon], 点击下一步-->安装-->完成

APP如何同时设计 iOS 和 Android

APP如何同时设计iOS 和Android 企业通常需要同时开发运行在Android 和iOS 设备上的App。 通常情况下,我们都只设计一个App,然后在交给iOS 和Android 开发团队....顶...峰..a..p..p...之前将它们做一些微调。 要按照这种方式进行App 设计,首先我们应当预先了解这两个平台之间的差异,这样你才能够使得你设计的App 在这两个平台上的外观都能显得自然。 在设计开始之前 1.了解另外一种系统 你很可能有自己更加喜欢的一个系统,在进行跨平台设计的时候,你应当首先去做的一件事是了解另外一个系统。 2. 选择一个优先的平台 如何选择优先的平台并不在于你的个人喜好,而是在于你设计的这款app 的市场定位如何。 你所处的环境中有更多人使用Android 设备吗?它是收费App 吗?你的目标受众是谁? 问问自己这些问题有利于你决定哪一个平台应当是被优先满足的。 3. 了解设计规范 阅读iOS 和Android 的设计规范。 在过去,iOS 被认为有着更加严格的设计规范,有时候为了让App 能够上线AppStore,你需要走一个大约两周长的流程。 而在Play store 里则不存在这样的审批流程。 然而,恰恰由于App 上线如此开放,Android 平台上的App 质量一直因为良莠不齐而饱受诟病。 设计你的APP 1. 总体的样式 从iOS7 以后,Apple 就一直在采用扁平化的设计模式,去除了所有不必要的纹理和阴影等效果——和早些年间的版本完全不同。

Google 的新MD 设计规范有了一些更加细节的规定,通过一种叫“纸片”的方法来创造更多的层级关系。 2. 实体按钮 Android 有一个返回按钮,点击它可以返回上一个屏幕。 iPhone 上则没有这样一个按钮,所以需要有一种方式能够让用户回到先前的屏幕。 通常的解决方案是在屏幕的左上角放置一个返回键。 3. 通用元素 两种平台之间的确存在着一些通用的元素,比如说状态栏和标题栏,它们会出现在每一屏的顶部。 不同平台上的导航栏有一定的差别。 在Android 上文本是左对齐的,然而iOS 上是居中对齐的。 在iOS 上,很多企业都用它们的logo 来替换首页标题栏中的文字,但是在Android 设备上这不是一个好的主意。 状态栏(显示你的网络、电量和时间信息)是系统组件,你不需要考虑设计它,只要确保它们不会对他人造成误解就好了。 4. 导航 或许iOS 和Android 平台之间最大的区别就在于他们的导航样式了。 Android 上最主要的导航方式是抽屉菜单,Android 用户们通常在这个菜单内进行跳转。而且在整个App 中,这种体验是一贯的。 Apple 的导航样式更倾向于tab bar,它位于屏幕的底部,并且以一种很简单的方式实现上部内容的切换。 5. 要不要用卡片式? 在UI 设计中,卡片正逐渐成为一种主要的UI 设计样式,它们可以应付多种情况,而且给用户提供了一种能够呈现有效内容的便捷方式。 视觉上,卡片非常适应于Android 的Material Design(它事实上源自于纸张的灵感)。使用阴影和卡片之间的合理间距能够创建一种自然的外观。 在iOS 上,使用卡片设计需要更加的小心谨慎,尽管一些大型的App,诸如Facebook 和pinterest 的确使用了一种略微偏离iOS 视觉规范的设计风格。

Android虚拟机ADT安装及显示helloword应用

一下载相关资源 ADT(Android开发工具)(Android Development Tools的缩写) https://www.360docs.net/doc/e112676752.html,/sdk/index.html,点击“Download the SDK ADT Bundle for Windows”,在新打开的页面中选中“I have read and agree with the above term s and conditions”同意许可协议,选择32进制还是64进制,再次点击“Download the SDK ADT Bundle for Windows”按钮就正式开始下载了,文件大小400MB左右。 原来需要单独下载Eclipse和ADT插件,我发现最新的ADT包中已经集成了这两个东西,也就是说,下载则一个就够了,省心。 二搭建Android虚拟机(模拟器) 将下载到压缩包解压缩到一个目录中,需要用到的开发程序都是“绿色”的,也就是说,不需要安装解压缩之后就可以开工了。 执行/sdk/tools/android.bat,会启动Android SDK Manager,正常的话我们可以看到SDK platform已经安装好了,如图: 下面再按如图所示,在菜单中打开:Tools/Manage AVDs,如图:

这个AVD是Android Virtual Device的缩写,可以理解为虚拟机、模拟器,要调试开发应用,当然需要创建一台虚拟机了,点击“New” 在弹出的窗口中为新虚拟机进行一些简单的设置,如图所示:

AVD name:给虚拟机起一个名字 Device:设备(与电脑的分辨率是宽的不同,手机的分辨率是高的,所以当你选择过大的分辨率时,在电脑上可以显示不全,调试麻烦,我就吃了这个亏高度不要高于800)Target:Android的版本,没有特殊情况就用最新版 SD Card:我设置了200MiB 设好之后点击“OK”,顺利的话会显示创建结果,如图:

Android动态代码注入调试

目录 一、动态代码注入技术 (1) 二、动态分析工具jdb介绍 (2) 四、jdb动态分析Android实例应用程序 (10) 五、jdb动态分析第三方文件管理器应用程序 (17) 六、动态注入动态链接库 (20) 一、动态代码注入技术 Android动态代码注入即是不修改源程序只修改进程的寄存器、内存值等就能控制程序实现既定目标的一种方法。动态代码注入技术本质上就是一种调度技术,动态代码注入相比于普通的调试,最大的区别就是动态代码注入是一个“自动化调试并达到加载自定义动态链接库”的过程。所谓自动化,其实就是通过代码实现,在Linux上通过Ptrace就可以完成查看变量值、修改变量值、跟踪进程跳转、查看进程调试堆栈等待所有功能,当然,Ptrace功能是比较原始的,平时调试中的功能还需要很多高层逻辑封装才可以实现。一般而言,我们要对一个进程进行动态注入,主要有以下几个方便目的:增强目标进程的功能、修复目标进程缺陷、劫持目标进程函数、窃取目标进程数据、篡改目标进程数据。

如上图所示,进程A注入到进程B后,通过司改寄存器和内存,让进程B加载自定义的动态链接库a,当a被加载后,a会尝试加载其他模块,比如加载dex文件等等,具体的注入过程如下: ?ATTATCH,指定目标进程,开始调试; ?GETREGS,获取目标进程的寄存器,保存现场; ?SETREGS,修改PC等相关寄存器,使其指向mmap; ?POPETEXT,把so path写入mmap申请的地址空间; ?SETRESG,修改PC等相关寄存器,使其指向dlopen; ?SETREGS,恢复现场; ?DETACH,解除调试,使其恢复; 下面就介绍一些简单的进程注入方法: 二、动态分析工具jdb介绍 JDB是一个简单的Java命令行调试器,包含在JDK中。使用JDB

App测试中ios和Android的区别

App测试中ios和Android的区别 1、 Android长按home键呼出应用列表和切换应用,然后右滑则终止应用; 2、多分辨率测试,Android端20多种,ios较少; 3、手机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash); 4、操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等; 5、push测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示); 6、安装卸载测试:Android下载和安装的平台、工具和渠道比较多,ios主要有app store,iTunes和testflight下载; 7、升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号),对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)。 另外,对于测试还需要注意以下几点: 1、并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音、录音等的播放时强制其他正在播放的要暂停; 2、数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等; 3、push(推送)测试:在开关机、待机状态下执行推送,消息显示及其推送跳转的正确性;应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转否正确;推送消息阅读前后数字的变化是否正确;多条推送的合集的显示和跳转是否正确; 4、分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确; 5、触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会crash等。 移动App Bug的影响是用户体验差、App的商店评级下降、用户换用竞争对手的App,声誉和信誉损失、最后销售量减少,如果它是一个付费App的话。 移动App测试与传统台式机测试相比有一定的复杂性。这些复杂性可以被分类为:环境(大量的设备,各种移动OSs,适应频繁OSs变化)。 设备(触摸式和非触摸式设备,有限的内存容量,电池耗电量)。

Android基于模拟器的调试

Android基于模拟器的调试 本文档说明怎样在模拟器上使用我们自己编译的Android平台环境进行调试,以及使用过程中可能会碰到的问题和解决方法。 对于Java开发而言,开发环境取决于我们所包含的.jar文件。只要包含我们自己生成的.jar文件,就可以基于模拟器调试我们自己的模块。 1生成Android开发环境 我们所需要的所有.jar文件都生成在Android下面的路径下: out\target\common\obj out\host\linux-x86\android-sdk_eng.[USERNAME]_linux-x86.zip内的android.jar 上面的这些.jar文件通过下面两步编译生成: make make sdk 其中,执行make sdk时会出错,按照下面的方法修改文件: frameworks/base/core/java/android/hardware/Camera.java: line 1359 原来的代码: /** * Set GPS latitude reference coordinate. This will be stored in JPEG EXIF * header. * @param latitude GPS latitude reference coordinate. */ public void setGpsLatitudeRef(String latRef) { set (KEY_GPS_LATITUDE_REF, latRef); } 修改为: /** * Set GPS latitude reference coordinate. This will be stored in JPEG EXIF * header. * @param latRef GPS latitude reference coordinate. */ public void setGpsLatitudeRef(String latRef) { set (KEY_GPS_LATITUDE_REF, latRef); } 使得生成Doc的元字符@param后紧跟的那个字符串为参数列表中的一个,其他几处错误为同一类型的错误,使用同样的方法修改即可。

相关文档
最新文档