没有android开发环境搭建经验怎么办

Android安全研究经验谈
发表于 13:58|
来源程序员杂志|
摘要:Android应用本身的问题主要集中在4大组件上,通常是一些逻辑处理问题导致信息泄露、身份认证绕过等。
安全研究做什么从攻击角度举例,可以是:对某个模块进行漏洞挖掘的方法,对某个漏洞进行利用的技术,通过逆向工程破解程序、解密数据,对系统或应用进行感染、劫持等破坏安全性的攻击技术等。而防御上则是:查杀恶意应用的方法,检测和防范漏洞利用,为增强系统和第三方应用的安全性提供解决方案等。当然,通常情况下攻与防的概念是相对模糊的,一种安全技术往往在攻防两端都适用,也许更值得留意的是一种技术背后的思路和意识。研究员需要在新技术上倾注灵感,并且付出相当程度的汗水,才能换来某种成果——通过艰难的探索过程最终获得极大的成就感。我也经常在当Android adb shell中的$变成#时激动得大呼小叫(终端程序从一般用户提升到root用户),因为在此之前往往已经历了一个复杂的漏洞分析和利用过程。需要具备的知识在正式开始安全研究前,首先要掌握一定知识和技能。安全涉及的知识范畴是无限的,但大多数时候可以遇到问题再去了解相关的知识,不过以下内容是我认为应该提前掌握的。?【要掌握的理论知识】主要是操作系统原理。这是非常重要的知识,是认识某一个具体系统的前提。虽然大学教材多以Linux内核为案例进行教学,但微软开源的Windows Reserch Kernel(简称WRK)同样也是非常棒的学习资料。比起单纯阅读源码和分析文章,自己动手编译系统内核,用调试器一步步调试内核更有帮助。最后还可以尝试自己编写内核驱动模块或分析已有的内核Rootkit来深入理解操作系统。我在大学里有很长一段时间在分析WRK,了解包括系统引导、内存管理、进程管理、线程调度、文件系统、网络驱动等内容,对我一直非常有帮助。鉴于嵌入式平台的开发和调试都有一定限制和不便,我不大建议一开始就在手机设备上研究操作系统内核,在PC上完成这部分知识储备会更方便。就移动平台而言,理解操作系统有助于我们进一步理解Android系统本身,而在理解Android系统之后,才能开始讨论Android系统的安全问题,这是一个循序渐进的过程。【几门需要掌握的语言】研究员不需要特别强的软件开发能力,需要关注的是某种语言的内部实现过程。掌握C/C++,能理解该语言被编译器处理后汇编层面的实现原理。了解Java,需要理解Dalvik/ART虚拟机内部的实现过程。对于x86/ARM汇编,能读懂即可,遇到不认识的指令能从指令集手册中找到答案。另外,还需要掌握一门脚本语言,主要用来快速编写小工具或者POC,我推荐Python,因为开源社区中大部分Android安全分析类工具都是用Python编写的,例如知名的Androguard和Drozer。【逆向工程】逆向工程绝对是一项必备技能。无论是分析恶意软件行为还是分析闭源软件漏洞,都需要逆向工程。但更重要的是,逆向工程能让我们从闭源程序中汲取营养,加快理解系统的速度。在对这类程序进行反汇编、调试的过程中,也会加深对操作系统、程序语言内部实现的理解,将上述知识串联起来。神奇小子Geohot不久前利用CVE–开发出了Android 4.4 Root通杀工具Towelroot,大多数人都不明白这个漏洞复杂的利用方法,但我通过对Towelroot逆向工程,第一时间理解了该漏洞利用的几项关键技术(Towelroot加入了大量混淆指令来反逆向工程,因而难度颇高)。也许我们不是天才,但逆向工程能让我们时不时地跟上天才的步伐。理解Android系统Android源码非常庞大,即便只看系统组件,恐怕也要好几年。更何况其源码并不是Android手机的全部,还有Linux内核、基带、bootloader、TrustZone等底层模块等待我们探索。我们只需了解支撑Android系统运转的核心服务,以及Android系统的安全机制设计即可,其余内容则可在需要用到时再去分析。就组件来说,下面是应该优先理解的。1. Zygote:Android应用的孵化器,一切Android程序由此进程fork而来。2. Binder:Android的进程间通信机制,它是Android平台最核心的功能组件。3. Package Manager Service:应用安装包管理服务,不仅负责包的安装和卸载,更重要的是负责Android应用信息的查询和控制,例如Android权限管理。4. Activity Manager Service:管理Android框架层的进程,也包含了Android应用四大组件的逻辑实现。5. Dalvik虚拟机:虽然即将被ART取代,但Dalvik依然是帮助我们理解虚拟机和Android可执行程序文件格式的好教材。就安全机制来说,则需要了解下面几点。1. 沙箱隔离:沙箱是基于不同应用之间User ID的不同而实现的,其本质是Linux对于不同用户间访问权限的隔离。2. 应用权限控制:Android应用需要申请相应的权限才能访问系统的资源和信息,大多数权限由Android框架层的API进行控制,另一部分权限映射到应用所在的Group ID上,由Linux内核做出控制。3. SE Linux:Linux内核层的安全增强,是一套独立于传统Linux权限访问控制的强制性权限控制机制。Google已将这套机制移植到Android内核,这给内核漏洞利用带来了一些挑战。?Android安全研究的热点方向与现状【手机Root与内核漏洞挖掘利用】在Android 2.x时代,往往利用一些用户层程序的漏洞即可将手机root,现在则主要依赖内核漏洞。Android为Linux内核引入了新的内核模块,以及不同厂商的驱动方案。这就为系统内核引入了新的安全隐患,无论是高通、MTK还是三星猎户座,或者华为海思的芯片,多少都出现过一些内核漏洞,这是Android平台内核的一个主要攻击点。随着Google将SE Linux引入Android,攻击面有所减小,但不能完全解决内核漏洞利用的问题。从防御角度来说,同样面临着挑战:一些APT攻击如果利用内核漏洞,将能拿到系统的完全控制权。Android平台内核漏洞长期以来一直都在持续曝光,漏洞利用与防范依然是持续的热点。从这个方向入手,首先需要了解Linux内核,然后不断对目前已公开的CVE漏洞进行分析,理解漏洞的成因和各个类型。在漏洞利用方面,有开源项目run_root_shell可作为参考,该项目包含了多个经典漏洞的利用实现,是入门的好材料。除此之外,还可以关注国外的POC程序或对一键root类产品做分析。【Android应用与系统框架层漏洞挖掘】Android应用本身的问题主要集中在4大组件上,通常是一些逻辑处理问题导致信息泄露、身份认证绕过等。得益于Android沙箱机制,应用本身的攻击面是相对较小的,但一些开发人员似乎因此有恃无恐,在编码过程中表现出了较差的安全意识。此外围绕WebView或者SSL漏洞所引发的安全问题也比较常见。框架层漏洞也是逻辑漏洞居多,但危害往往要比应用更大。比较著名的高危漏洞有Master Key签名绕过、WebView远程代码执行等。目前已存在一些开源漏洞挖掘工具,如Drozer和Intent Fuzzer。我们可以在此基础上改进,如果有独特的挖掘思路,也可以自己尝试开发挖掘工具。【恶意软件攻防】从数量上看,隐私窃取和钓鱼软件是目前Android平台主要的恶意软件类型。如果用户对于应用申请的权限毫不知情,一款应用便能轻松获取用户的短信、通讯录、地理位置、录音等私密信息。Android平台需要有主动防御程序控制应用获取隐私的行为,目前有两种方法实现,一种是集成到厂商的ROM代码中,另一种则是利用API Hook实现。无论使用哪种方式,目前面临的问题都是如何更智能地为用户管理权限,以减少防御软件频繁弹窗带来的打扰。市面上还充斥着大量的仿冒支付类应用,他们看起来可能与正版应用没有区别,因为这些仿冒应用是由正版应用篡改而来的。这些软件通常会有用户名和密码窃取的恶意代码。安全软件需要通过签名、代码特征等方法对此进行识别。从趋势上看,恶意软件也不再局限于Android安装包(APK)的形式进行分发,而往往会带有Linux可执行文件(ELF),对系统进行更深层次的攻击。 目前市面上的安全产品对APK文件的查杀已较成熟,但对系统原生层的恶意软件查杀还没有特别完善的实现,对一些APT级别的新型威胁防御也仍在探索阶段。知名的恶意软件Oldboot就是恶意程序使用底层技术对抗查杀的典型案例,该程序的完整分析细节已被公开,读者可从网络上搜索文章参考,以更好地理解如何分析恶意软件行为。【支付安全】长期以来,手机支付使用短信验证码和独立支付密码解决支付者身份认证的问题。但仍存在短信遭人窃听或密码被窃取的风险,因此一些厂商效仿PC上的U盾方案,推出音频盾或蓝牙盾解决认证问题。而利用ARM架构下的TrustZone将支付认证过程独立于操作系统之外,也是一个方向。手机支付是很强的需求,依然有很多方案值得探索。【应用加固(加壳)与逆向工程】游戏、支付类应用都有很强的反逆向工程、防破解、防篡改的需求,目前已有几家比较成熟的方案出现。但目前对于Android ELF格式程序的保护还不够,终极防护当然是使用类似PC上的VMProtect虚拟机。逆向工程与加固保护是一个不断攻防的过程,加固方案需要不断提升自己的保护强度,修补方案上的漏洞。而对于逆向工程师来说,不能逆向不意味着不能分析程序行为。一个好的软件跟踪方法往往让你事半功倍。目前国内比较知名的加固方案有梆梆加固、360加固保、爱加密等,大家可以在这些产品官网上看到相应信息。【企业安全BYOD】仅就终端设备本身来说,BYOD通常的方案是将手机系统隔离出两个环境:一个公用,一个私用,两者互不影响。三星的KNOX安全套件就提供了这样一个功能,使用Container,将需要隔离的公用应用包裹起来;Google也在开发类似应用,但传闻进展较慢。这类方案通常会和系统本身紧密结合,实现这样一套方案,或者发现这类方案中的安全漏洞,也是一个新的方向。实例:Android 4.4.2系统vold漏洞【如何在第一时间得知漏洞】并非所有漏洞都会被纳入漏洞数据库(CVE),很多漏洞是被秘密修补的。一种方法是看版本升级时Android源码中的Change Log,运气好的话,你会从AOSP的Git Commit信息中注意到下面这句:洞的信息。如果你对这条提交记录背后的问题足够敏感,就能发现问题。事实上,注意到这条信息的人是少数。大多数人得知这个问题前,已有人掌握了技术细节并开发出了一款针对Moto的root工具放到了XDA论坛和Twitter上。【如何掌握漏洞细节】可能你会想到对这款名为“[Root 4.4.x] Pie for Motorola devices”工具进行逆向工程,但通过JEB,可以发现它经过了复杂的混淆。这种混淆叫做dexGuard,比Google使用的ProGuard更复杂。花精力脱壳,还不如自己开发一个能做软件行为跟踪(trace)的ROM对其进行分析,但这是比较高级的话题。先把工具放到一边,其实我们也可以通过现有的信息对该漏洞的利用方法进行分析。首先我们已获得了漏洞修补信息(其diff信息参见/platform/system/vold/+/0de7c61),这个问题出现在系统vold进程中,再结合源码和AIRBUS发布的分析报告,我们就可以得知以下信息。1. 问题出现在系统进程vold(卷管理进程),这是一个以root权限运行的分区管理进程。具体出现问题的功能模块是ASEC(Android Secure External Caches),其大致功能是对应用在SD卡上存储的文件进行权限管理。因为SD卡的文件系统格式是FAT,它本身是不支持文件权限管理的。2. 使用“vdc asec create YOURNAME ext4 none 2000 false”命令,vold进程接收到消息,在/data/app-sec目录下创建一个文件夹/data/app-sec/YOURNAME,并将这个目录mount成/mnt/asec/YOURNAME。3. 如代码所示,vold在将/data/app-sec/和YOURNAME拼凑在一起时,使用了sprintf,未对YOURNAME这个字符串做任何校验。这意味着我们可以将YOURNAME构造成“../../PATH”的形式。这样vold将为我们mount任何目录,如果这个目录已存在(例如/sbin),将被新mount的目录覆盖。【如何利用这个漏洞获取root】既然vold可以为我们重复mount任意目录,就意味着我们可以使用自己指定的目录覆盖系统目录,也就等价于可以替换系统文件来获得以root身份执行的机会。将/sbin目录重新mount,替换/sbin/adbd文件,并且当系统进程adbd重新被init进程启动时,我们将有机会以root权限执行任意代码。这个漏洞利用代码非常简单。这段命令首先创建了一个指向/sbin的符号链接/data/local/tmp/test1。然后使用vdc向vold发送触发漏洞的消息,vold将会把/data/app-sec/../../data/local/tmp/test1 mount起来。因为/data/local/tmp/test1是/sbin的符号链接,所以/sbin目录被覆盖成一个空分区。这个空分区是不可写入的,但我们能在该分区内建立符号链接,因此我为/data/local/tmp/adbd建立了一个符号链接是/sbin/adbd。这样一来,/sbin/adbd就指向了一个我们可控的文件:/data/local/tmp/adbd。当adbd进程被杀死,init进程将重新启动adbd,/data/local/tmp/adbd以root权限运行。后面要做的就是为手机安装su程序了,至此,手机root的过程完成。作者简介:360安全研究员,专注于Android平台的攻防技术和漏洞分析。个人博客http://retme.net&<img src="http://ipad-cms.csdn.net/cms/attachment/d63f8e21090.jpg" 本文选自程序员电子版2014年8月刊,该期更多文章请查看。2000年创刊至今所有文章目录请查看。欢迎(含iPad版、Android版、PDF版) 。
推荐阅读相关主题:
为了更好帮助企业深入了解国内外最新大数据技术,掌握更多行业大数据实践经验,进一步推进大数据技术创新、行业应用和人才培养,-12日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所、北京中科天玑科技有限公司及CSDN共同协办的2015中国大数据技术大会(Big Data Technology Conference 2015,BDTC 2015)将在北京新云南皇冠假日酒店隆重举办。
相关热门文章【转载】Android开发经验总结,很受用。
- 水海_十年苦禅 - ITeye博客
博客分类:
转自:/thread--1.html
1、有一个方法,有一段类似于下面这样: Java代码
new Thread(){
public void run(){
// 做了一些数据库操作
db.close();
}.start();
结果运行过程中,发现有时候会报数据库已经锁定的异常。最后才定位到上面这段代码。原因是在上面的run()方法中打开了数据库,这个时候会自动锁定Database,如果在关闭数据库之前,另外一个线程B也进行数据库操作,就会报这个异常。如果数据库已经关闭之后,另外一个线程B请求数据库操作,就没有问题。 所以在新线程中进行数据库操作,或者是TimerTask中进行数据库操作的时候,要注意考虑并发的问题,也许就会有数据库锁定的异常。 2、另外一段代码,将TimerTask的销毁操作放在了Service的onDestory()方法里,但是发现有时候会报TimerTask已经schedule的异常。开始就觉得很奇怪,不是已经在onDestory()方法里关闭了TimerTask了吗?后来想到,Service的onDestory()方法不是一定有机会执行的。在资源不足的时候,系统会强行关闭Service,在这种情况下,onDestory()方法是没有机会执行的。 所以,绝对不能依赖组件的onDestory()方法。 3、这次项目管理有一个失误的地方。就是在项目设计早期,没有关注数据库表设计。到了后期才来检查数据库的设计,结果发现有很多地方需要变更,这就造成建表语句、模型对象、DAO都要修改,开发和测试的成本都非常高。 所以以后一定要在早期就关注数据库设计,如果有迫不得已的数据库变更(这个几乎是难免的),也要趁早进行 4、有的时候,发现两个组员都是更新了最新的代码,可是一个能正常跑起来,另一个人就总是报错。这种情况,一般是因为数据库错误引起的,虽然是同样的代码,但是却不是同样的数据库。这种情况下,需要把旧的应用卸载,重新启动。这样就会触发SqliteDatabaseOpenHelper的onCreate()方法,重新建立一致的数据库 5、前期把整个应用的常量,都放在一个Constants类里,这样虽然避免了硬编码,但是其实由于Constants类里充斥了各种各种的常量,也失去了可维护的意义。所以如果常量太多的话,可以考虑根据模块或者业务,分散到不同的Constants类里 6、一般跳转到别的Activity,是调用startActivity()方法,不过如果需要在新Activity里做完某些操作以后,再通知原先的Activity的话,应该调用startActivityForResult()方法,然后实现onActivityResult()方法 7、有一次在DDMS里发现了has leaked window的异常告警。这种情况一般是在Activity里创建了Dialog,然后又没有及时关闭引起的。解决的办法很简单,在需要创建Dialog的地方,调用showDialog()方法,然后在Activity里实现onCreateDialog()方法,这样的话,Activity就会管理Dialog的生命周期,就不会发生上述的问题了 8、一般连接android底层的linux,用adb shell命令就可以了。但是如果同时开启了模拟器,又连接了真机,就不能这样了,必须用以下的命令: adb devices,这个命令可以看到有哪些设备,包括了模拟器和真机 然后用adb -s (deviceId) shell,就可以连接到目标终端上 或者还有一个办法,用adb -d shell连接到设备上,用adb -e shell连接到模拟器上 9、我自己定义了一个VO类,可是用Intent.putExtra()方法竟然放不进去,原来是这个VO没有实现Serializable接口 10、项目中业务上需要很多后台长时间运行的Service,可是后来发现Service实在太多了,所以换了一个方案。把实现业务逻辑的Service,都改成用IntentService实现。只开启一个长时间后台运行的Service,在这个Service里用多个TimerTask,定时去startService()各个IntentService。这样应用就只有一个驻留Service了 11、很多Service都去实现onStart()方法,其实这是不对的,onStart()是一个遗留方法。Android2.2以上的版本,官方推荐是实现onStartCommand()方法 12、如果没有多线程的需求的话,使用IntentService替代Service是一个不错的选择。一方面不需要编码另起线程(Service默认是跑在UI Thread里的,这点相当恐怖),另一方面,也不需要显式地调用stopSelf(),或者stopService()。IntentService的问题是,如果需要并发地处理请求,则晚来的Intent只能排队 13、TimerTask比较多的话,一个最佳实践(或者是迷信)是:用3、7、11、13、17这样的素数错开运行的时间 14、一个已经调用了.cancel()方法的TimerTask,不能被再次作为Timer.schedule()的参数,需要重新实例化一个TimerTask 15、没有特别的需求的话,个人建议可以在AndroidManifest.xml里不配置intent-filter,这样就强制代码只能用显式的Intent来跳转Activity或者开启Service,不能用隐式的Intent来调用。 这种做法虽然损失了一些面向组件的灵活性,但是定位问题会比较简单。因为比较容易查出来,某个Service被哪些组件启动了,或者某个Activity可以从哪些页面跳转过来 当然,如果Activity和Service被设计为允许其他应用使用,那必须要支持隐式的Intent调用 16、数据库字段的命名,还是有点讲究的。比如在T_PERSON表里,字段就没必要再命名成PERSON_NAME,直接叫NAME就可以了,前者比较冗余。这个虽然是小问题,但是对于追求细节完美的应用来说,还是要注意的。如果前期没有注意,到项目后期再统一优化,代价会大很多 17、原来经常用getSharedPreference()方法,来获取自定义SP文件。其实发现,用PreferenceManager.getDefault()方法就可以获得一个默认的SP文件了 18、DTO和VO,建议重载toString()方法,调试会很方便 19、Activity的findViewById()方法,和View的findViewById()是不一样的。 前者一般都在onCreate()方法里调用setContentView()方法,然后findViewById()就是从这个xml文件里找ID 后者一般调用一个inflate()方法,然后findViewById()方法是从这个xml文件里找ID
&!--EndFragment--&
浏览: 25913 次
来自: 北京
setOnFocusChangeListener这个方法根本就 ...
首先谢谢lz分享,下下来代码我试了一下是可以实现cd命令的,但 ...
不起作用呢。
Field defaultScale = WebView.cl ...
写不很不错 但还是求工程 fengpengfei11@163. ...android开发面试经验 - 共42条真实android开发面试经验分享 - 职业圈
android开发专题汇总
android开发面试经验分享列表,共42条
面试时间:2016面试职位:android开发分享时间:2016-09
面试经历: 基本流程:投简历--在线比试--测评--技术面--综合面感觉每一面都会刷人,简历主要看学校,学历(非211以上简历都过不了),在线比试主要考基本的数据结构,网络,Linux的基本内容,有两道编程题。我是在技术面这一关挂的,当天面完感觉还行,当时有同学当晚就收到了二面通知,我没有收到,第二天同学去问了,说二面通知已发完,才恍然大悟,跪了。。。。 面试官提的问题: 主要是问java的一些基本知识,集合类,多线程相关知识,然后看简历,问项目,问了android进程间通信的基本方式,知道EventBus吗?有几种模式,各代表什么,聊了半个多小时,最后问我工作地点,我填的是深圳,然后我说其实地点也不是固定的,去别的地方也行,然后就是回去等通知。
面试感觉:一般
面试难度:难度一般
应聘途径:校园招聘
面试时间:面试职位:分享时间:2016-07
面试经历:
面试官提的问题:
面试时间:2016面试职位:android开发分享时间:2016-10
面试经历: 地点:西安,面试官一进去直接问的数据结构,例如二叉树的遍历,排序算法实现,操作系统的虚拟内存管理,权限管理等。基本不问Android相关的知识点,还有问了项目相关的知识,Windows的消息机制等相关知识。一般不问应用,直接问的底层实现和原理。 面试官提的问题: 二叉树的遍历,排序算法实现,操作系统的虚拟内存管理,权限管理等。基本不问Android相关的知识点,还有问了项目相关的知识,Windows的消息机制等相关知识
面试感觉:不好
面试难度:困难
应聘途径:校园招聘
面试时间:2015面试职位:android开发分享时间:2015-10
面试感觉:一般
面试难度:难度一般
应聘途径:网上申请
面试时间:2016面试职位:android开发分享时间:2016-09
面试感觉:一般
面试难度:难度一般
应聘途径:校园招聘
面试时间:2015面试职位:android开发分享时间:2015-09
面试感觉:一般
面试难度:困难
应聘途径:网上申请
面试时间:2014面试职位:android开发分享时间:2014-03
面试感觉:一般
面试难度:难度一般
应聘途径:网上申请
面试时间:2016面试职位:android开发分享时间:2016-03
面试感觉:很好
面试难度:简单
应聘途径:校园招聘
面试时间:2015面试职位:Android开发分享时间:2016-03
面试感觉:一般
面试难度:很简单
应聘途径:网上申请
面试时间:2016面试职位:android开发分享时间:2016-10
面试感觉:不好
面试难度:困难
应聘途径:校园招聘
面试时间:2016面试职位:android开发分享时间:2017-02
面试感觉:一般
面试难度:困难
应聘途径:网上申请
面试时间:2016面试职位:Android开发分享时间:2017-02
面试感觉:不好
面试难度:简单
应聘途径:网上申请
面试时间:2014面试职位:android开发分享时间:2014-12
面试感觉:一般
面试难度:难度一般
应聘途径:社会招聘
面试时间:2016面试职位:android开发分享时间:2016-03
面试感觉:一般
面试难度:简单
应聘途径:内部推荐
面试时间:2015面试职位:android开发分享时间:2016-03
面试感觉:一般
面试难度:难度一般
应聘途径:网上申请
面试时间:2016面试职位:android开发分享时间:2016-04
面试感觉:很好
面试难度:难度一般
应聘途径:校园招聘
面试时间:2015面试职位:android开发分享时间:2016-04
面试感觉:一般
面试难度:很简单
面试时间:2016面试职位:android开发分享时间:2016-05
面试感觉:不好
面试难度:简单
应聘途径:网上申请
面试时间:2016面试职位:android开发分享时间:2016-06
面试感觉:一般
面试难度:难度一般
应聘途径:网上申请
面试时间:2016面试职位:android开发分享时间:2016-06
面试感觉:一般
面试难度:简单
应聘途径:网上申请
面试时间:2016面试职位:android开发分享时间:2016-06
面试感觉:一般
面试难度:难度一般
应聘途径:社会招聘
面试时间:2016面试职位:android开发分享时间:2016-07
面试感觉:一般
面试难度:简单
面试时间:2016面试职位:android开发分享时间:2016-10
面试感觉:不好
面试难度:很简单
应聘途径:社会招聘
android开发&热门职位面试经验
其它职位面试
最新面试经验||两年android开发经验
两年android开发经验
应该看你自己对技术的底气和面试时感觉自己发挥的如何来定。。重点大学这种东西有啥用。。另外还
据权威数据显示:目前最受用户关注的智能手机手机操作系统是安卓手机操作系统,获得了70%.1
您好,很高兴为您解答:有点乱,希望能有点价值。char APDU_buffer[] = {
我是杭州的,给一个杭州的薪资水平你做参考研究生1年Android经验10-15k本科生1年
没必要的,安卓更火一些,学习安卓,java还是不错的选择,移动时代还是非常火的培训机构没有
范例:public void onCreate(Bundle sa) { super.on
大概是8K-12K,如果你是本科的话。 学历再好点,会更高
8K有点扯了吧,上海的工资水平要比天津高,你来天津只能比你在上海低
android:scaleType=&fitXY&
在做定时任务的时候,有的同学可能能会用到Timer这个定时任务的辅助类,但是使用它会有潜在
android:scaleType=&fitXY&
SDK是1.21版本的。 导入项目的时候,选择下载的SDK解压的文件目录 例如,D:My
这个是我在网上找的不知道是不是你要的: java定时任务Timer 关于定时任务,似乎跟时
android游戏编程之从零开始,不过最好有学过Java语言,不然有些内容可能会看起来有点
自学对于不同的人有不同的收获,关键要看自己的自律性了。自学的技术要看你自己是否着急上手,自
仅就找工作而已,android要好些,门槛要低些,再说你有java基矗但是安卓市场的盈利能
android 比较好一点 最起码用户多一点的 应用资源也多点 顾客比较喜欢的
真的是把程序员当民工啊!!我X,我刚j2ee1年,现在转Android, 6k. 所以我觉
不知道你Android自学的水平如何,如何自学的效果还不错的话,可以找到五千的,如果你学的
android 1年工作经验 ,能独立开发项目,在上海 待遇...有经验,在深圳做Java
我自己买的《Android SDK 范例大全》都是实例。比较适合初学者。再到网上找一些视频
既然都有java基础和web开发基础 那看看android的API开发文档 官方的例子就可
考个linux方面的认证还不错哦 现在LPI认证貌似在国际上比较流行的
android 1年工作经验 ,能独立开发项目,在上海 待遇...有经验,在深圳做Java
如果adnroid具备独立开发的能力 北京8k打底
跟我惊人的相似啊,我也是快两年,此时也自学android,这几天把环境配置好了。我是去书店
应该把你的长处补到你的短处上,既然有了技术就不怕没人要你。
一般的全程下来都是4个月左右,费用1万多吧,其实费用都差不太多,关键是选择学校比较重要,不
5000+ 应该没有问题..工资可以再加...然后多面试几家 谈谈待遇.
其实你也可以讲承接服务发布到汇包网上,汇包网是目前国内唯一面向大型外包项目的专业项目发布平
1234567891011121314151617181920

我要回帖

更多关于 android开发面试经验 的文章

 

随机推荐