`
zy77612
  • 浏览: 284072 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android开发 FAQ

阅读更多

Android新手入门 FAQ

 

1、Q:什么是Android?

  A:Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。简单来说是个开源的手机操纵系统。
  

2、Q:Android就业前景

  A:Android是Google开发的基于Linux平台的开源移动操作系统。它包括操作系统、用户界面和应用程序----移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开发和完整的移动软件。

     国外Android市场正在如日中天的扩展,据市场调研机构最近发布的一份报告称,今年第一季度基于Android操作系统的智能手机在美国智能手机总销量中所占比例达到28%,首度超过苹果iphone,苹果iphone约为21%,相信在不久的将来会有更多的用户选择Android系统的手机或是无线终端设备。


3、Q:Android的特点都有哪些?

  A:1)应用程序框架:支持组件的复用和更换
           2)Dalvik 虚拟机:专门为移动设备进行过优化
           3)集成的浏览器:基于开源的 WebKit 引擎 ,TV上会内置Chrome浏览器
           4)优化的图形机制:自定义的2D图形库,基于OpenGL ES 1.0规范的3D图形实现(本项为硬件加速器可选)
           5)SQLite:轻量级的数据库,支持结构化数据的存储
           6)媒体支持:面向常见的音频、视频以及静态图形档案格式 (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
           7)GSM 技术 GSM:global system for mobile communications (依赖硬件支持)
           8)Bluetooth, EDGE, 3G, and WiFi (依赖硬件支持)
           9)Camera, GPS, compass, and accelerometer (依赖硬件支持)
           10)Rich development environment:丰富的开发环境,包含一套硬件仿真器,一些用于程序调试、内存和性能剖析的工具,以及支持Eclipse集成开发环境的插件(ADT )。


4、Q:学习android需要哪些基础?
   
  A:学习Android一定要有Java基础,最差也要类似Java的其他面对像对象语言的基础。很多朋友从来没有搞过编程,听说Android能赚钱,就疯了一样冲过来要学习。这明显是不靠谱的,甚至有的朋友一个字母一个字母的按照我的例子去敲代码,然后非常努力的把代码背下来。像背英文单词一样的背代码,编程学成这个样子,还真是让小生佩服啊!不管怎样,你最少也要掌握Java语言的如下知识点才能够开始学Android:

           a)Java基本数据类型及其特点
           b)Java分支语句和循环语句的使用
           c)类和对象的创建和使用方法
           d)函数的使用
           e)抽象类和接口
           f)继承和实现
           g)对象的多态性
           h)包和访问权限
           i)异常的处理
           j)类集框架
           k)eclipse的基本用法


5、Q:Android上编程用什么语言?
   A:Android应用基于Java,支持SQL,由于底层是Linux所以底层支持C/C++。
           目前有两种编程:
              1)基于ADT的JAVA编程
              2)基于NDK的C编程


6、Q:Android编程环境需要哪些?
  
  A:编程环境:Ide 、Android SDK、JDK、Java
            官方推荐用JDK+ECLIPSE+ADT+ADK(WINDOWS开发环境下。


7、Q:什么是APK?
  A:APK是Android Package的缩写,即Android安装包(anapk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。

          apk文件和sis一样最终把android sdk编译的工程打包成一个安装程序文件格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。


8、Q:什么是SDK?

  A:SDK,Software Development Kit 的缩写,中文即“软件开发工具包”。广义上指辅助开发某一类软件的相关文档、范例和工具的集合。

       SDK是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合,一般而言SDK即开发 Windows 平台下的应用程序所使用的SDK。它可以简单的为某个程序设计语言提供应用程序接口 API 的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK 还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。

 

9、Q:什么是ADT?

     A:ADT(Android Development Tools):
目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具,它可以连接sdk和Eclipse,帮助Eclipse找到sdk


10、Q:什么是API?

  A:API(Application Programming Interface)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。

          其实早在 DOS 时代就有 API 的概念,只不过那个时候的 API 是以中断调用的形式(INT 21h)提供的,在 DOS 下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将 AH 置为 30h 后调用 INT 21h 就可以得到 DOS 操作系统的版本号。而在 Windows 中,系统 API 是以函数调用的方式提供的。同样是取得操作系统的版本号,在 Windows 中你所要做的就是调用 GetVersionEx() 函数。

11、Q:什么是TCP协议和UDP协议?
   
  A:TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

             UDP协议是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

 

12、Q:什么是IPC?

   A:TPC(Inter-Process Communication): 进程间通信

 

 

Android中级进阶 FAQ

 

1、Q:Android开发者应该先看什么文档?

      A:对开发者来说,最重要的是概念,而DOCS中的Dev Guide里面对其解释十分清晰,请仔细阅读。并可以到eoeAndroid开发者社区中找到很多的文档和学习资料。


2、Q:Android系统架构有哪些?
     
       A:Android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。


3、Q:什么是开源?

       A:开源,意为开放源代码,由Bruce Perens(曾是Debian的创始人之一)定义如下:

          1)自由再散布(Free Distribution):获得源代码的人可自由再将此源代码散布。

           2)源代码(Source Code):程式的可执行档在散布时,必需随附完整源代码或是可让人方便的事后取得源代码。

          3)衍生著作(Derived Works):让人可依此源代码修改后,在依照同一授权条款的情形下再散布。

          4)原创作者程式源代码的完整性(Integrity of The Author’s Source Code):意即修改后的版本,需以不同的版本号码以与原始的程式码做分别,保障原始的程式码完整性。

          5)不得对任何人或团体有差别待遇(No Discrimination Against Persons or Groups):开放源代码软件不得因性别、团体、国家、族群等设定限制,但若是因为法律规定的情形则为例外(如:美国政府限制高加密软件的出口)。

           6)对程式在任何领域内的利用不得有差别待遇(No Discrimination Against Fields of Endeavor):意即不得限制商业使用。

           7)散布授权条款(Distribution of License):若软件再散布,必需以同一条款散布之。

           8)授权条款不得专属于特定产品(License Must Not Be Specific to a Product):若多个程式组合成一套软件,则当某一开放源代码的程式单独散布时,也必需要符合开放源代码的条件。

           9)授权条款不得限制其他软件(License Must Not Restrict Other Software):当某一开放源代码软件与其他非开放源代码软件一起散布时(例如放在同一光碟片),不得限制其他软件的授权条件也要遵照开放源代码的授权。

          10)授权条款必须技术中立(License Must Be Technology-Neutral):意即授权条款不得限制为电子格式才有效,若是纸本的授权条款也应视为有效。


4、Q:如何搭建编程环境?

       A:开发平台推荐Eclipse。VS基本不要想,除非你特别钟爱于传统的vim或其他编程环境并且打算让自己每天敲一堆命令,否则还是用Eclipse吧。它是官方推荐的,目前支持的还算中规中距。而且Linux,windows都能用。
   
            这里拿eoe的技术大牛pcr所使用的开发环境举例,SDK_2.3+Eclipse_3.6.1+ADT 8.0.1。这应该就是目前最普通的开发环境组合了。至于其他的辅助工具,可以在对android有一定了解之后在考虑添加。


Q:什么是NDK?

    A:1)NDK是一系列工具的集合。

          NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和java 应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK 集成了交叉编译器,并提供了相应的mk 文件隔离CPU、平台、ABI 等差异,开发人员只需要简单修改mk 文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK 可以自动地将so 和Java 应用一起打包,极大地减轻了开发人员的打包工作。

          2)NDK提供了一份稳定、功能有限的API头文件声明。

        Google 明确声明该API 是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK 中看出,这些API 支持的功能非常有限,包含有:C 标准库(libc)、标准数学库(libm)、压缩库(libz)、Log 库(liblog)


Q:怎样提高Android应用程序的速度?

      A:首先, 我们要先明白“加快”是有两层意思的,第一层是代码执行所需要的时间,第二层意思是用户需要等待用户界面响应的时间。下面是提高Android应用程序运行速度的几条原则。

           1)不要让UI线程等待
           2)耗时操作不可取
           3)模拟器和真实的设备有不同
           4)通知用户,要注意用户体验。


7、Q:Android运行库有哪些?
   
      A:Android 包括了一个核心库,该核心库提供了JAVA 编程语言核心库的大多数功能。每一个Android 应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik 虚拟机实例。Dalvik 被设计成一个设备可以同时高效地运行多个虚拟系统。Dalvik 虚拟机执行(.dex)的Dalvik 可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA 编译器编译,然后通过SDK中的"dx" 工具转化成.dex 格式由虚拟机执行。Dalvik 虚拟机依赖于linux 内核的一些功能,比如线程机制和底层内存管理机制。


8、Q:Android都支持哪些Java特性

    A:针对于Java SE或Java EE的程序员想转到Android平台上进行开发,有以下几点常规的支持:

           1)目前来看JDK的高级特性均支持,比如说1. Java的反射、2.NIO (New I/O)、3. JNI (Java Native Interface)相对而言 对于OpenGL和SQLite的支持比较强大,但是AWT和JDBC这些东西都不支持。

           2)在Xml解析上,兼容DOM、XmlPull和SAX,同时数据交换格式上,Android虽然不支持LINQ但对于Java来说JSON同样支持。

           3)对于Http处理方面,提供了轻量级的Http处理类,以及更完善的Apache库支持。

           4)音频方面Android比较强大,使用了OpenCore库,很多地方我们可以自己编写编码、解码器进行扩展。

           5)Android在文件系统上基本山和Java是相同的,不过对于高效率的内存影射文件而言提供了android.os.MemoryFile这个类。

          总体而言,Java程序员转入Android开发只需要了解平台特有的,Intent,Service,Receiver和Activity就差不多了,深入了解下AIDL和UI控件和自定义Widget基本上可以胜任常规的工作。

9、Q:Android最简单播放GIF动画方法是什么?

     A:GIF动画的原理就是逐帧播放,在Android中提供了AnimationDrawable类可以实现,GIF89A的解码方法在过去的J2ME平台移植到Android平台也能用,其实在Google Android上面开发目前2.2以后的固件支持的方法除了Flash Player外,更好的兼容方法就是使用万能的webkit浏览器了。直接在工程中内嵌一个webView,当然了路径大家可以换成本地的,对于浏览器使用本地资源url为file://开头。

           不过webView的资源消耗也不小,开个webView对象可能占用了至少8MB的RAM吧,保守估计,当然更多的要看插件和以及html的复杂程度所决定的。

10Q:线程在Android应用当中的作用?

        A:1)动态更新UI 如AsyncTask 类,在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行
              2)SOCKET之间的通信
              3)文件的下载
              4)与服务端之间的交互
              5)复杂数据和逻辑的处理

 

Android高手过招 FAQ

 1、Q:如何成为高手?

      A:成为一名真正的Android高手必须掌握和遵循的一些准则:

          1)学会懒惰
     Don't Reinvent the Wheel(不要重复发明轮子)。
     Inventing the Wheel(发明轮子)。
     Don't Reinvent the Wheel(不要重复发明轮子)。
    “轮子理论”,也即“不要重复发明轮子”,这是西方国家的一句谚语,原话是:Don't Reinvent the Wheel。“不要重复发明轮子 ”意思是企业中任何一项工作实际上都有人做过,我们所需要做的就是找到做过这件事情的人。拿到软件领域中就是指有的项目或功能,别人已经做过,我们需要用的时候,直接拿来用即可,而不要重新制造。

          2)精通Android体系架构、MVC、常见的设计模式、控制反转(IoC)

          3)编写可重用、可扩展、可维护、灵活性高的代码

          4)高效的编写高效的代码

          5)学会至少一门服务器端开发技术
      

2、Q:JNI是什么?

   A:JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

     使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。


3、Q:Android和Linux的区别?

      A:Android是一个专门针对移动设备的软件集,包括一个操作系统,中间件和一些重要的应用程序。Android SDK 提供了在Android平台使用java语言进行android 应用程序开发必须的工具和API接口。Android 系统架构除了Linux2.6内核之外,还提供了丰富的lib和适用于java的运行时环境(很重要的一点是Dalvik虚拟机,类似于JVM)、应用程序框架和核心应用。在此基础之上可以快速开发应用程序。

            linux内核像是核心技术支持,而google 将其商业化于移动设备上。android上开发应用程序和Windows MFC开发有些类似。


4、Q:SDK升级了,如何更新SDK?

       A:更新SDK是非常棘手的。当一个新的SDK发布,必须是plugin也发布。更新容易出现的错误是两个版本都存在,而且都不正常。最终不得不卸载了它们并且重新安装最新的一个。然后那个最新的SDK工作正常了。建议任何面对SDK或者plugin升级的人都采用相同的过程。简单的卸载老版本,然后安装新版本。不要升级。


5、Q:如何进入Recovery模式
   
       A:每部Android设备进入Recovery模式的方法不同。以Milestone为例:若bootloader为90.78,按住键盘的“X”键,再按电源键开机,看到moto的经典logo即可放开此2键。等待出现一个三角形图标,然后按住音量向上键+轻按拍照键,会出现四个选项。放开按键,可以用方向键选择一个选项。作用分别为重启,应用update.zip,清除所有数据至出厂状态、清除cache。

6、Q:Android bionic移植需要注意的事项
      A:下面通过一个例子来说明移植binic需要做的事情(BIONIC使用的内核头文件从2.6.29 升级到 2.6.31):
          1)修改之前,先要备份 android/bionic

           2)按照下面方法复制linux kernel v2.6.31 头文件:
                复制 include/asm-generic 到 bionic/libc/kernel/original folder
                复制 include/linux 到 bionic/libc/kernel/original folder
                复制 include/mtd 到 bionic/libc/kernel/original folder

          3)运行 tools/update_all.py 脚本,生成新的头文件,方法如下.
               $ cd android/bionic/libc/kernel
               $ tools/update_all.py
               以上的操作将复制新的头文件到 bionic/libc/kernel/common 目录

          4)删除 bionic/libc/kernel/original 目录

          5)复制平台相关的头文件:
              复制 linux v2.6.31 平台相关的 asm 目录到指定的路径,方法如下:
              复制 arch/arm/include/asm 到 android/bionic/libc/kernel/arch-arm/
              复制 arch/x86/include/asm 到 android/bionic/libc/kernel/arch-x86/

           6)从 v2.6.29 bionic/libc/kernel/common/linux 复制一下的头文件到新的 android/bionic/libc/kernel/common/linux 目录:
                android-alarm.h
                android-pmem.h
                android_power.h
                ashmem.h
                binder.h
                msm_adsp.h
                msm_audio.h
                msm_mdp.h
                keychord.h

           7)编译
               $ cd android
               $ make -j4


7、Q:Android源码下vendor目录下文件的作用?
  
       A:指的是某些公司的产品型号,主要是一些针对硬件配置的东西,比如radio 方面的,若是采用TI 的,这里面会有TI提供的一些RIL方面的接口等。


8、Q:编译Android源码和编译Android内核有什么区别?


      A:其实没什么区别,就多了几个android特有的驱动,最重要的是binder


9、Q:如何获取手机和存储卡上的图片?
  
      A:

/**
    * 通过uri获取文件的绝对路径
    * @param uri
    * @return
    */
       protected String getAbsoluteImagePath(Uri uri) 
   {
       // can post image
       String [] proj={MediaStore.Images.Media.DATA};
       Cursor cursor = managedQuery( uri,
                       proj,                 // Which columns to return
                       null,       // WHERE clause; which rows to return (all rows)
                       null,       // WHERE clause selection arguments (none)
                       null);                 // Order-by clause (ascending by name)
       
       int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
       cursor.moveToFirst();
        
       return cursor.getString(column_index);
   }

 

10、Q:如何使用双缓冲?
         
          A:系统自身已经实现了双缓冲,也就是说为了避免重影,必须连续onDraw两次,或者是对上一次onDraw里面画脏的部分进行修复。
                执行Bitmap.createBitmap函数一般要花销100-300ms的时间,要想提高它的效率,只能祈祷google能把android的代码写得更高效一些了。

分享到:
评论

相关推荐

    Android开发FAQ.pdf

    Android开发FAQ涵盖了许多关于Android平台的基本知识,包括其定义、就业前景、主要特点、学习基础、编程语言和编程环境。以下是对这些知识点的详细说明: 1. **Android定义**: Android是由Google推出的开源移动...

    深入Android开发FAQ的详解

    在Android开发过程中,开发者经常会遇到各种问题,这些问题可能涉及到API的理解、系统特性的掌握以及最佳实践的应用。本文将深入探讨一些常见的Android开发问题,并提供有效的解决方案。 1. 动态显示可变数值的通知...

    MTK android faq大全

    这个文件似乎是关于MTK(MediaTek)公司为开发者提供的Android开发调试的常见问题解答(FAQ)集合。请注意,由于文件的部分内容存在OCR技术错误,下文将尽可能地对相关知识点进行准确解释。 ### 知识点一:MTK ...

    MTK android online faq

    "MTK android online faq" 是针对使用MTK平台进行Android开发时常见问题的综合解答,这份文档可能是6月份更新的,旨在帮助开发者更顺利地进行项目调试。 1. **MTK Android开发基础**: - MTK平台的Android系统构建...

    MTK android开发最新FAQ

    从提供的文件内容来看,这份文档是关于MTK(MediaTek)公司提供的android智能平台开发的常见问题解答(FAQ)。文档开头包含了一段法律声明和免责声明,这部分内容提供了有关使用MTK软件和文档的重要信息。以下将详细...

    android开发资料大全

    新版Android开发教程及笔记-完整版 《Android中文教程》中文版 《android基础教程合集》 Android实例教程 会员贡献索引贴 实用Android开发工具和资源精选 APK权限大全 - Android必懂知识 最无私的Android资料...

    基于Android的Android高手过招 FAQ.zip

    这份“Android高手过招FAQ”压缩包文件,旨在为那些正在学习和研究Android开发的同学们提供宝贵的指导和解答常见问题。无论你是使用Android Studio、IntelliJ IDEA还是Eclipse进行开发,都能从中受益。尽管现代开发...

    Android高手过招 FAQ.zip

    在“Android高手过招 FAQ.zip”这个压缩包中,我们可以找到一系列与Android开发相关的资源,包括源码、论文、参考资料和学习资料。这些材料对于正在做毕业设计、课程设计或者致力于提升Android开发技能的人来说是...

    基于Android的Android高手过招 FAQ .zip

    通过"基于Android的Android高手过招 FAQ .zip",你将有机会系统性地学习并解决上述各个方面的疑问,不断提升自己的Android开发技能。无论你是要找工作还是在职场上提升,这都将是一份宝贵的参考资料。

    Android高手过招 FAQ .zip

    在Android开发领域,无论是初学者还是经验丰富的开发者,都会遇到各种各样的问题。这份名为"Android高手过招 FAQ .zip"的压缩包文件显然是一份非常实用的学习资源,包含了安卓项目源码、论文、参考资料以及学习资料...

    Android项目高手过招 FAQ.rar

    本书涵盖了Android开发的多个方面,包括UI设计、数据存储、网络通信、多线程处理、性能优化等。每个问题都提供了详细的解答和示例代码,帮助读者深入理解问题本质,掌握解决方法。此外,本书还提供了一些实用的工具...

    Android高手过招 FAQ.rar

    在Android开发领域,高手过招往往意味着深入探讨技术细节、解决实际问题以及分享经验心得。"Android高手过招 FAQ.rar"这个压缩包很可能包含了开发者在实践中遇到的各种常见问题及其解答,涉及了Android应用开发的...

    Android--开发--高手过招 FAQ.rar

    在Android开发领域,高手过招通常涉及到一系列高级技术与最佳实践。这个名为"Android--开发--高手过招 FAQ.rar"的压缩包很可能包含了开发者在实际工作中遇到问题的常见问答(FAQ),以及解决这些问题的深入技术解析...

    Android高手过招 FAQ .doc.zip

    由于文件列表中只有一个名为"Android高手过招 FAQ .doc"的文档,我们可以推测这可能是一个问答形式的文档,涵盖了Android开发中的各种关键知识点。 首先,让我们关注Android开发的基础部分。Android系统是基于Linux...

Global site tag (gtag.js) - Google Analytics