eoe 移动开发者论坛

 找回密码
 加入eoe

QQ登录

只需一步,快速开始

查看: 111529|回复: 835
收起左侧

Android高手过招 FAQ

    [复制链接]

该用户从未签到

100

主题

1300

帖子

2112

e币
发表于 2010-12-17 21:57:35 | 显示全部楼层 |阅读模式

没有eoe的账号,级别还太低,出门如何吹牛逼?

您需要 登录 才可以下载或查看,没有帐号?加入eoe

x
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:
  1. /**
  2.     * 通过uri获取文件的绝对路径
  3.     * @param uri
  4.     * @return
  5.     */
  6.        protected String getAbsoluteImagePath(Uri uri)
  7.    {
  8.        // can post image
  9.        String [] proj={MediaStore.Images.Media.DATA};
  10.        Cursor cursor = managedQuery( uri,
  11.                        proj,                 // Which columns to return
  12.                        null,       // WHERE clause; which rows to return (all rows)
  13.                        null,       // WHERE clause selection arguments (none)
  14.                        null);                 // Order-by clause (ascending by name)
  15.       
  16.        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
  17.        cursor.moveToFirst();
  18.         
  19.        return cursor.getString(column_index);
  20.    }
复制代码


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

签到天数: 44 天

连续签到: 1 天

[LV.5]常住居民I

1

主题

225

帖子

614

e币
发表于 2015-7-3 17:36:25 | 显示全部楼层
36666666666666666666666

签到天数: 2 天

连续签到: 2 天

[LV.1]初来乍到

0

主题

72

帖子

215

e币
发表于 2015-9-14 09:27:42 | 显示全部楼层
学习了,不过帖子有点老了,,,

该用户从未签到

3

主题

50

帖子

85

e币
发表于 2010-12-18 22:48:32 | 显示全部楼层
:):P

点评

对于初学者的我来是,似乎有点看不懂了,但"Don't reinvent the wheel"我很赞同  发表于 2011-6-15 17:22

该用户从未签到

0

主题

10

帖子

25

e币
发表于 2010-12-20 01:32:30 | 显示全部楼层
努力中...

该用户从未签到

1

主题

190

帖子

106

e币
发表于 2010-12-20 09:50:17 | 显示全部楼层
支持下:)

该用户从未签到

0

主题

139

帖子

144

e币
发表于 2010-12-20 10:46:55 | 显示全部楼层
学习学习学习学习学习学习

该用户从未签到

16

主题

315

帖子

109

e币
发表于 2010-12-20 11:27:06 | 显示全部楼层
牛 学习了.

该用户从未签到

16

主题

696

帖子

1354

e币
发表于 2010-12-20 12:55:11 | 显示全部楼层
好贴  ~

该用户从未签到

3

主题

110

帖子

316

e币
发表于 2010-12-20 13:54:15 | 显示全部楼层
改版了,一时不适应啊

该用户从未签到

3

主题

110

帖子

316

e币
发表于 2010-12-20 13:58:53 | 显示全部楼层
我还有好多东西要学啊

该用户从未签到

7

主题

341

帖子

607

e币
发表于 2010-12-20 15:13:02 | 显示全部楼层
学习来了

该用户从未签到

2

主题

540

帖子

5

e币
发表于 2010-12-20 15:36:23 | 显示全部楼层
:handshake

该用户从未签到

3

主题

67

帖子

165

e币
发表于 2010-12-20 15:53:39 | 显示全部楼层
{:2_32:}

该用户从未签到

13

主题

877

帖子

904

e币
发表于 2010-12-20 16:47:40 | 显示全部楼层
学习了....

该用户从未签到

2

主题

22

帖子

136

e币
发表于 2010-12-20 18:30:40 | 显示全部楼层
很好的贴子支持一下!

该用户从未签到

18

主题

279

帖子

331

e币
发表于 2010-12-21 09:06:13 | 显示全部楼层
学习了
*滑动验证:
您需要登录后才可以回帖 登录 | 加入eoe

本版积分规则

推荐阅读
赞助商们

QQ|联系我们|小黑屋|手机版|eoe 移动开发者论坛 ( 京ICP备11018032 京公网安11010802020210  

GMT+8, 2017-11-23 00:15 , Processed in 1.216494 second(s), 47 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
关闭

扫一扫 关注eoe官方微信