在Windows下搭建Android开发环境

Mon, 12 Jan 2015 11:17:35 GMT

  随着移动互联网的迅速发展,前端的概念已发生很大的变化,已不仅仅局限在网页端。而Android系统作为智能机市场的老大,作为前端开发工程师,非常有必要了解和学习。但面对众多学习资料,站在前端开发工程师的角色,怎样挑选出合适的路进行快速学习,而不必浪费大量时间去摸索,该系列文章希望能帮助到小伙伴们。

  文章会挑选几个实际的例子,贯穿在整个系列中,涉及到Java、Android、程序设计等多方面知识,力求让大家快速掌握。俗话说,工欲善其事,必先利其器,系列的第一篇就从Window系统下Android的环境搭建说起。Let’s Go!

工具/原料

  • JDK

  • Eclipse

  • ADT

JDK的安装和Java环境变量的设置

  1. 1

    JDK下载地址

        JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

      JDK(Java Development Kit)是整个Java的核心,包括一系列Java开发的东西,安装完毕需要配置一下环境变量。

  2. 2

    JAVA_HOME

      JDK的安装路径,这个环境变量本身不存在,需要创建,创建完则可以利用%JAVA_HOME%作为统一引用路径,其值为:jdk在你电脑上的安装路径。

    在Windows下搭建Android开发环境
  3. 3

    PATH

      PATH属性已存在,可直接编辑。作用是用于配置路径,简化命令的输入,其值为:%JAVA_HOME%\bin。

    在Windows下搭建Android开发环境
  4. 4

    CLASSPATH

      用于编译时JAVA类的路径,注意这里设置的是两个值,(.;)表示的是JVM先搜索当前目录。其值为:.;%JAVA_HOME%\lib\tools.jar。

    在Windows下搭建Android开发环境
  5. 5

    配置完毕后,通过cmd运行以下命令:java -version,javac 如果出现返回信息,则设置成功。

    在Windows下搭建Android开发环境
    END

安装Eclipse

  1. 1

    Eclipse下载地址

      Eclipse下载地址:http://www.eclipse.org/downloads/? (选择Eclipse Standard版本即可)。

      Eclipse为Java及Android开发的IDE。Eclipse不需要安装,把解压包解压后,剪切eclipse文件夹到你想安装的地方,打开时设置你的工作目录即可。

    在Windows下搭建Android开发环境
    END

安装Android SDK

  1. 1

    Android SDK下载地址

        Android SDK下载地址:http://developer.android.com/sdk/index.html。

      Andorid SDK为Android管理开发包工具,提供了Android各级平台的开发包和工具。注意,因为我们是独立安装,不是一体化(集成系列工具)所以需要单独下载SDK。(如图)

    在Windows下搭建Android开发环境
  2. 2

    运行安装文件,并把安装目录下tools文件夹路径设置进PATH环境变量。

    在Windows下搭建Android开发环境
    在Windows下搭建Android开发环境
  3. 3

    去到安装目录运行SDK Manager,一开始什么平台和工具也没有,需要下载回来。公司内网的话需要使用代理来下载。

    在Windows下搭建Android开发环境
  4. 4

    到 Tools -> Options… 把代理填上,点击 Close 后则会出现众多平台列表,把Android Tools 选上安装,另外建议把2.2以上的全部下载安装。

    在Windows下搭建Android开发环境
    在Windows下搭建Android开发环境
    END

安装配置ADT

  1. 1

    安装ADT

      启动Eclipse,点击 Help菜单 -> Install New Software… ?,点击 ?Add… ?,输入地址:http://dl-ssl.google.com/android/eclipse/。

    在Windows下搭建Android开发环境
  2. 2

    选取要安装的项,一路Next完成安装并重启。这样ADT就安装完毕了。

    在Windows下搭建Android开发环境
  3. 3

    配置ADT

      选择 Window -> Preferences ,在弹出面板中就会看到Android设置项,填上安装的SDK路径,则会出现刚才在SDK中安装的各平台包,按OK则完成配置。此时Android的环境就搭建完毕,可以进行Android项目的开发了。

    在Windows下搭建Android开发环境
    END

创建第一个Android项目

  1. 选择 File -> New -> Other -> Android -> Android Application Project。

  2. 输入项目所需信息

      Application Name (应用的名称)

      Project Name (在Eclipse中该项目的名称)

      Package Name (存放Java类的包名称,其实质是存放的文件夹路径,.号为文件分隔符,我们编写的Java文件都会放在项目的src目录下,如com.tencent.helloworld表示类放在src/com/tencent/helloworld文件夹中)

    在Windows下搭建Android开发环境
  3. 一路Next直到Finish,则我们的工程创建完毕。

    在Windows下搭建Android开发环境
  4. 由于程序是运行在模拟器上的,我们还没有创建一个模拟器,所以需创建一个,创建完点关闭则可。

    在Windows下搭建Android开发环境
  5. 点击 三角型 run按钮,然后选择刚才创建的模拟器,则程序开始运行。小提示:启动模拟器会比较慢,所以,当程序作出修改,需要再次运行时,不要关闭掉模拟器,直接按模拟器上的Home或返回键退出app,之后再按run,则可重新跑起。

    在Windows下搭建Android开发环境
  6. 6

    结束:恭喜你!你的Android环境已经搭建成功。

 

...
浏览 : 6783 阅读全文

  Android Studio 1.0.1刚刚发布不久,谷歌紧接着发布了Android Studio 1.0.2版本,和1.0.0一样,是一个Bug修复版本。在上一篇Android Studio 1.0.1 + Genymotion安卓模拟器打造高效安卓开发环境,我们介绍了Android开发环境的搭建,今天先来说一下上一篇中大家问道比较多的问题,然后说一些Android Studio的使用技巧。

 

 一、搭建开发环境中遇到的问题及解决办法

 1、Genymotion模拟器网络错误

  我们顺利的安装完了Genymotion,下载了一个设备,当启动的时候,发现有的人会遇到下面的错误:

看到这个错误,首先不要惊慌,看看说的是什么,大概意思说的是VirtualBox的网络配置错误。下面我们来看一下解决办法:

win7以上的系统,在网络图标单击,打开网络和共享中心,更改适配器设置,如图:

打开后,选择VirtualBox Host-Only Network--属性--双击:Internet 协议版本4(TCP/IPv4)--修改为自动获取IP和DNS 即可解决这个问题。如图:

当然,如果你发现这样做还是解决不了错误的话,可能你的电脑IP是静态的,需要自己手动设置IP。

 

2、运行项目遇到的错误

  我们运行项目,有时候会遇到下面的错误,如图:

这个相信开发过Android的朋友都遇到过,处理办法是重新启动adb.exe.下面我们来看看怎么操作。

win + R,输入cmd,打开windows命令窗口,输入一下命令,如图:

这个命令就是列出网络中占用5037端口的程序,显示的有点多,是吧,其实我们只需要看第一行,就是最后一列不为0的那个。我们看第一行,看到PID为8356的这个程序占用的5037端口,敢私自占用端口,必须要“弄死”它,下面来看看,怎么"弄死"它,如图:

看到成功,已终止PID为8356的进程,说明我们已经成功的"弄死"了私自占用的5037端口的进程,接下来再运行Android项目就不会再出现错误了。

建议先不要启动模拟器,先运行一下,如果没有错误,再启动模拟器,有时候你启动了模拟器,发现有这个错误,处理完后,会识别不了我们的Android模拟器。

 

 二、Android Studio的使用技巧

  下面我们简单说一些Android Studio的使用技巧,希望能够帮助大家快速的上手。首先,新建项目,都差不多,这里就不说了,大家自己新建一个项目就可以了。

1、Android Studio的更新

点击Help菜单,Check for update...,如图:

 

2、打开和关闭预览分栏

  Android Studio最为强大的一点就是界面编辑的实时预览,但是每个人的电脑屏幕分辨率不同,有时候显示预览的话,代码就会显示不全,我们可以选择关闭它:

 

3、快速管理SDK和模拟器

  我们可以再工具栏看到如下内容,具体哪个对应什么,大家可以将鼠标放到上面看一下,我一个一个写出来,大家反而还要去记。

 

 三、Android Studio中的一些特性

 1、自动保存文档

 大家使用Android Studio是不是发现文件修改和没有修改过的,都一样了。这是因为,Android Studio自动保存文档,再也不用我们每次编辑完,按Ctrl + S去保存了。

 

2、自动注册Activity

之前我们用Eclipse开发Android应用,添加一个新的activity后,都要到Manifest.xml里面注册,现在我们添加完新的Activity后,Android Studio会自动为我们注册Activity。

 

3、一些类似Resharper的功能

使用过Resharper的会发现,Android Studio中有些类似Resharper的快捷键,如Alt + Enter,来解决一些问题,可以自动导包,显示解决方法等。如图:

这个时候我们按下Alt + Enter组合键,就会自动导包。

在大括号后面双击,会选中代码区块,如图:

 关于Git版本控制器的一些纠正:

在Android studio中,提交后的文件名会变成白色,而修改未提交的则为浅蓝色,如图,MainActivity是修改过的。

 

4、打开项目中的文件目录

  在Android Studio中,我们可以打开项目文件所在的目录,如图:

选择Show in Explorer就打开文件所在目录了。

 

 四、Android Studio打包生成APK

   当我们编写好代码,测试号应用后,需要在真机环境下测试,这个时候要生成apk,具体步骤如下:

如图,点击Build > Generate Signed APK...菜单,打开配置界面,

我们可以看到以下界面:

这里我配置过了,所以有信息,大家第一次配置的话,点击Create new...,在以下界面填写配置信息保存即可,下次可以打开保存的key,就不需要每次都配置了。

这个配置信息相信开发安卓的都应该比我清楚,我也是一知半解,具体大家可以网上找些资料看看。配置完后,点击Next,点击Finish,然后Android Studio开始生成APK,完成后,会弹出如下窗口:

看到这个,点击Show in Explorer,打开文件夹我们就看到生成的APK了,如图:

至此,一个App就生成了,Android Studio开发一个App的流程大致就是这样了。

如果后面我们更新了App,要发布新的版本,会发现找不到版本号在哪里改?其实,Android Studio把配置放到了Gradle中了,我们打开build.gradle进行修改即可,如图:

一个App的生成和升级更新,版本的修改,都说完了。更多关于Android Studio的内容,大家可以加入到下面的QQ群中,一起交流学习。

 

 作者:雲霏霏

QQ交流群:243633526

 博客地址:http://www.cnblogs.com/yunfeifei/

 声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

如果大家感觉我的博文对大家有帮助,请推荐支持一把,给我写作的动力。

 

 

 

...
浏览 : 6765 阅读全文

上周日已经体验了一把Android Studio顺便没事点了点其他功能,不过还是从自己创建项目开始说吧,首先我们要熟悉Android Studio中的Project 和 Module 两个概念。Android Studio中Project是工作空间类似于Eclipse中的WorkPlace, Module指的是具体项目类似于Eclipse中项目。Eclipse可以同时对多个 Eclipse 的 Project 进行同时编辑,这些 Project 在同一个 workspace 之中,对应的Android Studio可以同时对多个Android Studio的 Module 进行同时编辑,这些 Module 在同一个Project 之中。本文标题所说到的项目指的是Android Studio的 Module 。Android Studio创建一个项目,首先要先创建 Project 。但是你创建项目的同时,Project 自动创建了,Android Stuido新建一个项目之后对对应的创建一个对应的app文件夹,也就不需要我们重新创建一个Module,直接对应的操作这个Module即可。   

创建项目

一般来说新安装的Android Studio进入启动页面都会有一个下图这样的初始页面:

也可以从主页的另一个入口进行设置,File→New Project进行设置,接下来就是过程了,比较简单;

1.设置新建项目的名称

 

2.选择项目的类型,有四种分别是手机和平板应用,TV应用,可穿戴应用,Class应用,我们开发一般只涉及到了第一种

3.选择模板类型,为了简单说明问题,我选择了一个空模板,也可以选择其他模板研究下Google的代码的质量确实优于一般开发者(包括我)

4.MainActivity默认即可

接下来就是编译和创建项目需要几十秒,有的时候时间长点,视机器而定,看下最终的效果吧,修改了显示字体的大小,其他的都是原封的:

Genymotion模拟器

Android自带的模拟器有点像蜗牛,电脑配置不行的电脑使用原生的模拟器是个很痛苦的事情,有需求就有市场,这个时候Genymotion就出现了,优点就是速度快界面漂亮,这两天就已经足以立足了,至于其技术架构和其他的优势大家可以搜索之,官网:https://www.genymotion.com/。额外说个事情就是一般老外有对应的网站,中国有对应的个人开发者或者说公司就会搞个对应的中文的,http://www.genymotion.net/,net一看就是中国的人自己搞的,网上也有教程和博客写的这个是官网,就当看看吧。这个自己需要自己注册一个账号,然后下载对应文件即可,注册是为了启动Genymotion的时候需要账号验证的。注册这个事情就不多说了,注册之后记得验证一下邮箱。进入账号之后下载地址:

 

需要说明的一点就是Genymotion是依赖于VirtualBox的,就是你的电脑必须安装的有VirturalBox才可以运行的,如果你电脑没有直接下载第一个框框中的就行。默认的自带的VirtualBox是4.2.12,官网最新的是4.3.20,下载地址https://www.virtualbox.org/wiki/Downloads;简单的看下安装过程吧:

安装目录,这个自己放在常用的位置,之后在Android Studio中需要使用:

 之后的操作就都很简单了,都是下一步的操作,之后的话在设置中插件中搜索genymotion(之前的都是白天的主题,这个换了一个夜间的,截图有的是昨天的,有点今天的)

 

三个小框,第一个是设置(经常用到),第二个本身的模拟器,第三个就是安装完插件之后的效果,下图搜索插件的效果(我已安装过,如果未安装红色那地方应该是install):

启动本地的Genymotion,按钮很简单就三个,启动,添加,设置:

 

点击添加之后的效果:

下载其中的一个主题,一般都是200M左右:

最后设置Android Studio中Genymotion的路径(在我换背景之前截图的)

Android  Studio的Log和之前的Eclipse有点不一样,新增一个测试的Log,简单的对比下效果:

Genymotion的主页面确实很漂亮,忍不住截个图,大家随便看看:

完成以上操作,基本上可以单独运行app,效果如下:

正常的项目到这里一般都会运行成功的,但是有可能会遇到一个错误就是Failure [INSTALL_FAILED_OLDER_SDK],这是因为项目最低支持的版本是14,而模拟器是10,高于模拟器的版本,重新修改一下即可:

字体背景,版本控制和快捷键

一般来说安装完Android默认的白色主题,而且字体比较小,看起来不是那么的绚丽,因此网上大家看的Android Studio截图都是,上面有个截图,通过那个齿轮小图标进入设置,默认有两种主题Default是白色背景,Darcula是黑色背景,根据个人需要Save As一下,之后的话还可以进行删除,我新增了两个,Dark-keso和Default-keso。

设置了项目背景之后还不能完成是黑色,还需要设置一下IDE的主题,同样的通过Setting进入:

Android Studio对于版本控制做的比较好,同样的通过Setting进入,流行的是Git,先点Test测试一下,如果是成功的,可以进行接下来的操作:

通过最底层的导航VCS→Enable Version Control Integration选择Git版本控制:

右击项目这个时候就多了一个Git:

 

快捷键,Android  Studio可以直接选择其他版本的快捷键,包括宇宙第一IDE的Visual  Studio:

吐槽一句,昨天十点多的时候博客园挂掉了一个小时左右,导致无法写博客,十一点被要求睡觉,导致早上起来写博客,另外博客截图有的周一截图的,导致有的主题不一样北京不一样,大家多多包涵,对于这个新的IDE我也在研究中,如果不到位的地方大家多多指正。

...
浏览 : 6730 阅读全文

Android Studio体验(一)--Window版本安装

Sun, 04 Jan 2015 13:35:20 GMT

如果说之前看见有人用Android Studio你还是不屑一顾的话,那么现在该改变态度了,正如我一样,之前一直习惯于Android内置ADT插件的捆绑Ecliple,现在Android Studio发布会已经过去了12天,年底加班加的都已经无力吐槽,更何况学习了。其实在之前自己也下载过0.8.14的版本,不过当时存在一些问题加上时间不够无奈就放弃了,换个IDE总是需要时间熟悉的。现在Android Studio已经进入了稳定版,作为亲儿子以后将成为Android开发主流的IDE,同时 Android 工具开发者团队也表示,基于 Eclipse 插件的 ADT 可能会越来越不重要,开发进度变慢甚至以后不再维护。 Android Studio 跟 Eclipse相比最大的不足是 :Android Studio 只能用来创建 Android 项目,你无法像 Eclipse 一样同时创建除了 Android 项目以外的其他项目。

下载地址

如果你还没有尝试过Android  Studio强烈建议你尝试一下,以后是Android Studio 1.0 各个操作系统版本下载地址,无需翻什么墙(竟然是敏感词),点击可下载,如果不行可将地址放在迅雷中下载:
Windows 系统(32位系统和64位系统是同一个安装文件):

  1. android-studio-bundle-135.1629389.exe 包含 5.0 的 SDK 和开发工具,如果没有下载过 SDK,不管下载还是没有下载过,建议直接选择这个813M
  2. android-studio-ide-135.1629389.exe 不包含 SDK,只有 IDE 的版本,大小 200多M
  3. android-studio-ide-135.1629389-windows.zip 这个是不包含 SDK 的绿色解压缩版,大小 200多M

Linux 系统:

  1. android-studio-ide-135.1629389-linux.zip 不包含 SDK ,大概200多M

Mac 系统:

  1. android-studio-ide-135.1629389.dmg 不包含 SDK ,大概200多

 安装过程

虽然安装过程很枯燥乏味,但是我还是一张张的截图了,自己也遇到一些问题,会根据图片进行补充:

简单的安装过程,都比较简单我就直接截图就不说明了:

1.初始安装

2.建议全选

3.同意许可

4.IDE和SDK安装路径

5.建议分配的内存,直接默认,之后如果觉得太大可以在配置文件中修改

6.直接默认

7.安装过程

8.Android Studio的运行需要 VC++ 环境,Android Studio安装的过程中,会自动安装,这也是安装的时候选择安装包(exe)的原因,如果你的电脑也有360,注意允许,或者在安装之前直接关掉360软件;

以上是安装过程,安装完之后直接启动即可,启动页面:

9.下载组件

10.欢迎页面

吐槽一句,我第一安装点了很久都没有弄出欢迎页面,最后在设置中把始终打开最近的项目勾选掉就可以看到欢迎页面:

Android  Studio特性

关于特性网上很多文章,基本上就是模板与样例,智能代码编辑,翻译编辑器,多布局支持,性能分析工具,即时访问云服务,统一构建系统。Android Studio 采用了一种基于自动化构建工具 Gradle 的系统,据称可以提供很好的灵活性与扩展性,并支持在 IDE 之内或之外进行开发编译。其关键特性包括多版本(如调试版、发布版,付费版、免费版)支持,多 APK 支持、多 dex 文件支持以及对第三方开发库的依赖性管理等。同时,Google 也发布了针对 Gradle 的插件。Android Studio 支持 Gradle 自动化构建工具,对于我这种刚从 Eclipse 平台转移过来的人来说有点头大。

Android Studio 未来的改进:

1) 原生 SDK 管理器
2) 改进对重构支持
3) 改进对 Gradle 的支持

此外,Google 还打算进一步改进应用测试功能,并为游戏开发提供更好的支持。Android Studio 采取了与 Chrome 类似的版本发布模式,即每次版本发布都会依次推出 Canary(金丝雀版)、Dev(开发先去者版)、Beta(测试版)和 Stable(稳定版)这几个版本。如果开发者想要尝鲜,可以到 Canary 一探究竟,如果想用靠谱的功能,那就去稳定版。作为 1.0 版本,在功能和稳定性等方面 Android Studio 与微软的 Visual Studio 上仍不可同日而语,虽然VS开始支持并自带 Android 模拟器。但是 Google 号召 Android 开发者使用 Android Studio 完全不费劲,因为这是官方 Android IDE。

资料来源:http://developer.android.com/tools/studio/index.html

    http://tools.android.com/

...
浏览 : 8028 阅读全文

Android Studio 简单设置

界面设置

默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面。
Settings --> Appearance --> Theme ,选择 Darcula 主题即可。

 

字体设置

系统字体设置

如果你的Android Studio界面中,中文显示有问题,或者选择中文目录显示有问题,或者想修改菜单栏的字体,可以这么设置。
Settings --> Appearance ,勾选 Override default fonts by (not recommended) ,选择一款支持中文的字体即可。我使用的是 微软雅黑 ,效果不错。

 

编程字体设置

此部分会修改编辑器的字体,包含所有的文件显示的字体。
Settings --> Editor --> Colors & Fonts --> Font 。默认系统显示的 Scheme 为 Defualt ,你是不能编辑的,你需要点击右侧的 Save As... ,保存一份自己的设置,并在当中设置。之后,在 Editor Font 中即可设置字体。
Show only monospaced fonts 表示只显示等宽字体,一般来说,编程等宽字体使用较多,且效果较好。



Settings --> Editor --> Colors & Fonts 中可以还可以设置字体的颜色,你可以根据你要设置的对象进行选择设置,同时你也可以从网络上下载字体颜色设置包导入。

代码格式设置

如果你想设置你的代码格式化时显示的样式,你可以这么设置。
Settings --> Code Style 。同样的, Scheme 中默认的配置,你无法修改,你需要创建一份自己的配置。

 

默认文件编码

无论是你个人开发,还是在项目组中团队开发,都需要统一你的文件编码。出于字符兼容的问题,建议使用 utf-8 。中国的 Windows 电脑,默认的字符编码为 GBK 。
Settings --> File Encodings 。建议将 IDE Encoding 、 Project Encoding 、 Properties Fiels 都设置成统一的编码。

 

快捷键

Android Studio的快捷键和Eclipse的不相同,但是你可以在Android Studio中使用Eclipse的快捷键。
Settings --> Keymap 。你可以从 Keymaps 中选择对应IDE的快捷键,Android Studio对其他IDE的快捷键支持还是比较多的。建议不使用其他IDE的快捷键,而是使用Android Studio的快捷键。



当你想设置在某一个快捷键配置上进行更改,你需要点击 copy 创建一个自己的快捷键,并在上面进行设置。
Android Studio默认的快捷键中,代码提示为 Ctrl+Space ,会与系统输入法快捷键冲突,需要特殊设置。
Main menu --> Code --> Completion --> Basic ,更改为你想替换的快捷键组合。

 

其他设置

1

Android Studio编辑区域,在中部会有一条竖线。这条线是用以提醒程序员,一行的代码长度最好不要超过这条线。如果你不想显示这条线,可以这么设置。
Settings --> Editor --> Appearance ,取消勾选 Show right margin (configured in Code Style options) 。

 

2

显示行号

Settings --> Editor --> Appearance ,勾选 Show line numbers 。

 

3

显示空格。我习惯显示空格,这样就能看出缩进是 tab 缩进还是空格缩进。建议使用空格缩进。
Settings --> Editor --> Appearance ,勾选 Show whitespaces 。

 

4

去除拼接检查。我个人觉得没用,所以禁用掉。
Settings --> Inspections --> Spelling ,取消勾选。

 

5

如果你使用 Git 进行版本控制,你需要设置 Git 的安装文件目录。
Settings --> Version Control --> Git ,在右侧中选择你的 Git 的安装目录。

6

插件。Android Studio和Eclipse一样,都是支持插件的。Android Studio默认自带了一些插件,如果你不使用某些插件,你可以禁用它。
Settings --> Plugins ,右侧会显示出已经安装的插件列表。取消勾选即可禁用插件。


我个人禁用了一下插件:

  • CVS Integration : CVS 版本控制系统,用不到。
  • Google Cloud Tools For Android Studio : Google云 用不到。
  • Google Login : Google账号登录,`Google Cloud Tools For Android Studio** 插件需用,用不到。
  • hg4idea : Mercurial 版本控制系统,用不到。


这里需要注意的是,如果禁用了2和3选项,将导致不能使用导入官方样例的功能( import sample )。

你可以在 Browse repositories 页面中,搜索插件并安装。
我个人额外安装的插件:

  • .gitignore support : Git 版本控制系统中 .gitignore 文件管理插件。

 

7

检查更新。Android Studio支持自动检查更新。之前尚未发布正式版时,一周有时会有几次更新。你可以设置检查的类型,用以控制更新类型。
Settings --> Updates 。勾选 Check for updates in channel ,即开通了自动检查更新。你可以禁用自动检查更新。右侧的列表,是更新通道。

  • Stable Channel : 正式版本通道,只会获取最新的正式版本。
  • Beta Channel : 测试版本通道,只会获取最新的测试版本。
  • Dev Channel : 开发发布通道,只会获取最新的开发版本。
  • Canary Channel : 预览发布通道,只会获取最新的预览版本。


以上4个通道中, Stable Channel 最稳定,问题相对较少, Canary Channel 能获得最新版本,问题相对较多。

8

自动导入。当你从其他地方复制了一段代码到Android Studio中,默认的Android Studio不会自动导入这段代码中使用到的类的引用。你可以这么设置。
Settings --> Editor --> Auto Import ,勾选 Add unambiguous improts on the fly 。

 

9

有时很多人运行Android Studio会提醒你 JDK 或者 Android SDK 不存在,你需要重新设置。你需要到全局的 Project Structure 页面下进行设置。进入全局的 Project Structure 页面方法如下:

  • 方法1

    选择 Configure --> Project Defaults --> Project Structure
  • 方法2

    选择 File --> Other Settings --> Default Project Structure

 



在此页面下设置 JDK 或者 Android SDK 目录即可。

10



这是在检查你的 Android SDK 。有人会在这里卡上很长时间,很大的原因就是:网络连接有问题。可以通过配置 hosts 的方式来解决。如果检查需要更新,则需要你进行安装 。
如果想跳过这一步,可以进行如下操作:
在Android Studio安装目录下的 bin 目录下,找到 idea.properties 文件,在文件最后追加 disable.android.first.run=true 。

 

鉴于Android官网上下载很慢,Android Studio等已在网盘分享:Android Studio 网盘下载路径:

windows:http://yunpan.cn/cfTszP2wrJxdD (提取码:70b4)

Linux:http://yunpan.cn/cfTspUFzu2qqv (提取码:b9d3)

Mac:http://yunpan.cn/cfTsILm8hKpTB (提取码:4de0)

 

JDK1.7

Linux :http://yunpan.cn/cfTshyK9BGf7j (提取码:4a45)

...
浏览 : 6962 阅读全文

创建项目

首先,先指出Android Studio中的两个概念。 Project 和 Module 。在Android Studio中, Project 的真实含义是工作空间, Module 为一个具体的项目。

在 Eclipse 中,我们可以同时对多个 Eclipse 的 Project 进行同时编辑,这些 Project 在同一个 workspace 之中。在Android Studio中,我们可以同时对多个Android Studio的 Module 进行同时编辑,这些 Module 在同一个 Project 之中。

Eclipse 的 Project 等同于Android Studio的 Module 。
Eclipse 的 workspace 等同于Android Studio的 Project 。

本文中所说到的项目指的是Android Studio的 Module 。Android Studio创建一个项目,首先要先创建 Project 。但是你创建项目的同时, Project 自动创建了,因此很多人容易混淆这两种概念。

讲解1

Android Studio创建项目的过程,其实就是 Eclipse 创建项目过程的细分化。 Eclipse 许多在一个页面设置的内容,Android Studio拆分成了多个页面,因此,创建项目的过程其实并不复杂。

Android Studio有两种创建项目的方法。
第一个是在Android Studio起始页选择 Start a new Android Studio project 。



第二个是在Android Studio主页,选择 File --> New Project 。

 

讲解2

接下来,我们会看到这个页面。

 

  • Application name :应用程序的名称。它是app在设备上显示的应用程序名称,也是在Android Studio Project 的名称。
  • Company Domain :公司域名。影响下面的 Package name 。默认为电脑主机名称,当然你也可以单独设置 Package name 。
  • Package name :应用程序包名。每一个app都有一个独立的包名,如果两个app的包名相同,Android会认为他们是同一个app。因此,需要尽量保证,不同的app拥有不同的包名。
  • Project localtion : Project 存放的本地目录。


以上内容设置完毕,点击 Next 。

讲解3

接下来,我们会看到这个页面。



在这里,你可以你的 Project 中 Module 的类型以及支持的最低版本。

  • Phone and Tablet :表示 Module 是一个手机和平板项目。
  • TV :表示 Module 是一个Android TV项目。
  • Wear :表示 Module 是一个可穿戴设备(例如手表)项目。
  • Glass :表示 Module 是一个 Google Glass 项目(不知道 Google Glass 是什么请自行搜索)。


你可以同时选择多个类型,区别就是项目会根据你选择的类型创建一个或多个 Module 。

Minimum SDK 表示的是 Module 支持的Android最低版本。根据不同的用户可以选择不同的版本。你可以点击 Help me choose 来查看当前Android版本分布情况。现在这个时代,如果你的项目支持到 2.2 版本几乎是支持了所有的Android设备。

以上内容设置完毕,点击 Next 。

讲解4

接下来,我们会看到这个页面(由于我的 Module 类型只选择了 Phone and Tablet ,所以会有这个页面。)。



这个页面是让我们选择是否创建 Activity以及创建 Activity 的类型。你可以选择不创建 Activity ( Add No Activity )。

如果你选择自动创建 Activity,Android Studio会自动帮你生成一些代码。根据 Activity 类型的不同,生成的代码也是不同的。有时,你能从这些自动生成的代码中,学到很多东西,比如 Fullscreen Activity 。

选择完毕,点击 Next 。

讲解5

接下来,我们会看到这个页面(上一步中,我选择了 Blank Activity 。)。

 

  • Activity Name :自动创建的 Activity 的类名。
  • Layout Name :自动创建的 Activity 的布局文件名称。
  • Title :自动创建的 Activity 的名称。
  • Menu Resource Name :自动创建的 Activity 的 Menu 文件名称。


以上内容设置完毕,点击 Next 。你将会看到这个进度条。这个表示,Android Studio正在创建和编译你的项目。

 

讲解6

项目创建编译完毕,会进入Android Studio的主页,你将看到下面的界面。



左侧是你的项目文件区域,中部是代码区域,右侧是布局文件的预览区域。

细心的话,你会发现,左侧的项目文件区域显示的文件层级,和 Eclipse 是不相同的,甚至和本地目录的文件层级也是不相同的。
和 Eclipse 不相同是因为Android Studio使用了 Gradle 这个项目构建工具,而 Eclipse 使用 Ant 构建项目,你可以通过 Gradle 设置和 Eclipse 拥有相同的目录结构。
和本地目录的文件层级不同是因为,在Android Studio 0.8版本之后,官方推荐使用 Android 文件目录显示结构,你可以切换。在项目文件区域的左上角,你可以选择你想选择的文件结构显示类型。



虽然官方建议是使用 Android ,但是我个人还是比较喜欢使用 Project 。你可以根据你的个人习惯进行选择。下面是 Android 和Project 这两种显示类型的显示区别。



从这两张图可以看出: Android 区分明显,只显示了和项目有关的文件; Project 根据本地目录结构,显示了文件结构,比较繁杂却更显示出了真实目录结构。

另外,对于项目文件区域,我还有两个设置。在项目文件区域的右上角,有一个齿轮的设置按钮,点击可以更加细节的设置文件显示效果。



默认是没有勾选 Flatten Packages 和 Autoscroll to Source 的,是我自己勾选上的。 Flatten Packages 是设置将包以完整包名的形式显示(个人习惯)。 Autoscroll to Source 是你点击某一个文件,将自动打开,省去了双击操作。

讲解7

如果你已经有一个项目,你想在这个项目中创建一个 Module ,你可以选择 File --> New Module 。 

这样,会在当前的目录下创建一个 Module ,而不是在一个新的窗口中,单独创建 Project 和 Module 。

之后,你就会看到下面的界面。



同样的道理,你可以设置项目类型,但是,由于你现在是创建一个 Module ,所以只能选择一种类型。

下方的4个选项代表着不同的意义:

  • Android Library :创建一个 Android Library 的 Module 。
  • Import Existing Project :导入其他项目为一个 Module ,导入的项目可以是 Eclipse ADT 项目,也可以是 Gradle 项目( Gradle 只是项目构建工具, Eclipse 中也是可以使用的)。
  • Import .JAR or .AAR Package :导入 JAR 或者 AAR 文件为一个 Module 。
  • Java Library :创建一个 Java 的 Module ,主要用于编写 Java 的工具包。


选择完毕,点击 Next 。其余步骤,和上面几乎一样,就不在赘述了。

 

鉴于Android官网上下载很慢,Android Studio等已在网盘分享:Android Studio 网盘下载路径:

windows:http://yunpan.cn/cfTszP2wrJxdD (提取码:70b4)

Linux:http://yunpan.cn/cfTspUFzu2qqv (提取码:b9d3)

Mac:http://yunpan.cn/cfTsILm8hKpTB (提取码:4de0)

 

JDK1.7

Linux :http://yunpan.cn/cfTshyK9BGf7j (提取码:4a45)

...
浏览 : 8583 阅读全文

本篇教程中使用到的Android Studio版本为1.0, Eclipse ADT版本23.0.4。请尝试更新到该版本。

Android Studio默认使用 Gradle 构建项目, Eclipse 默认使用Ant构建项目。建议Android Studio导入项目时,使用 Gradle 构建项目。

导入 Eclipse 项目

本例中,使用到的 Eclipse 项目结构如图:
 



e-demo 为主项目, appcompat_v7 为 library 项目。

导入 Generate Gradle build files 项目

Google官方建议是通过本方法进行Android Studio导入 Eclipse 项目。

这种方式有一个好处就是兼容 Eclipse 的文件目录结构,通过版本控制中的文件过滤,可以在一个项目组中,同时使用 Eclipse 和Android Studio。

讲解1

File --> Export
 



讲解2

选择导出类型。选择 Android --> Generate Gradle build files 。



点击 Next 。

讲解3

很长一段英语(完全看不懂是什么意思)。



点击 Next 。

讲解4

选择要导出的项目。



因为我的 e-demo 项目依赖了 appcompat_v7 项目,所以我将 e-demo 和 appcompat_v7 都选择了导出。

点击 Next 。

讲解5

最终确认要导出的项目。



Force overriding of existing files 表示覆盖导出文件。使用 Generate Gradle build files 的方式导出项目,会在项目目录中生成一些文件。这里的覆盖文件指的就是覆盖这些可能已经生成过的文件。如果你之前有使用这种方式导出过项目,建议勾选。

点击 Finish 。

讲解6

这一步没有什么好说的,直接点击 Finish 。



讲解7

Finish 点击完毕,并没有弹出窗口显示导出的项目,就好像什么事情都没有做一样。其实,使用这个方式导出项目,是在项目中添加了一些文件,我们可以到项目目录下去看一看这些生成文件。

工作空间目录下
 



e-demo 目录下
 



appcompat_v7 目录下
 



我们可以发现:在工作空间目录下,多出了 gradle 文件夹和 build.gradle 、 build.gradle 、 gradlew 、 gradlew.bat 、 settings.gradle 文件;在 e-demo 目录下多出了 build.gradle 文件; 在 appcompat_v7 目录下多出了 build.gradle 文件。这些文件和文件夹都和 Gradle 有关系,用于构建项目。这些文件以及文件夹的作用,我们以后再说。

讲解8

由于 Eclipse 的 ADT 插件已经很久没有更新了,自动生成的 Gradle 编译设置已经跟不上Android Studio的更新速度,所以我们需要手动修改一些内容。

打开工作空间目录下的 gradle --> wrapper --> gradle-wrapper.properties 。修改一下内容: distributionUrl=http\://services.gradle.org/distributions/gradle-a.b.c-all.zip --> distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip

打开工作空间目录下的 build.gradle 文件。修改以下内容:

classpath 'com.android.tools.build:gradle:0.x.+' --> classpath 'com.android.tools.build:gradle:1.0.0' 。

之所以这么设置,是因为: Eclipse 导出的 Gradle 设置已经不是Android Studio 1.0 所支持的 Gradle 已经 Gradle 插件版本,需要手动更为支持的版本。否则轻则必须不能离线导入项目,重则项目导入失败。

讲解9

打开Android Studio,选择 Open an existing Android Studio project



讲解10

此时会弹出一个框,让你选择文件夹,这个时候需要注意的就是,你需要选择原来的 Eclipse 的工作空间目录,而不是 e-demo 目录。



点击 OK 。

讲解11

设置导入选项。



此处有一些比较重要的设置需要讲解一下。

  • Gradle project :此处通常显示的路径并不是你的 Eclipse 的工作空间的目录,而是 Eclipse 的工作空间的目录中的 gradle 路径。你需要手动删除后面的 gradle ,否则项目导入,你是看不到你的代码的,只能看到 gradle 目录下的内容。
  • Create directories for empty content roots automatically :不是很明白它的作用,一般默认即可。
  • Use default gradle wrapper(recommended) 和 Use local gradle disribution :这两个是让你设置使用的 Gradle 。默认会勾选 Use default gradle wrapper(recommended) ,我们需要手动勾选 Use local gradle disribution 。
  • Gradle home :勾选 Use local gradle disribution 后此项编程可编辑状态,默认的此处的地址为Android Studio安装目录中的 Gradle 路径地址。此处可能会有一些错误的警告,提示内容为: Gradle location is incorrect 。而你的这个目录下,确实是有 Gradle 的。产生这个问题的原因,很可能是因为 Gradle home 选项中,路径中的斜杠为 / 而不是 ** 。你需要点击左右的文件选择按钮,重新选择到Android Studio安装目录中的 **Gradle ,问题即可解决。
  • Offline work :设置 Gradle 使用离线的方式导入项目。你可以勾选也可以不勾选。如果你有进行 讲解8 的操作,你则可以勾选,以离线的方式进行编译。


点击 OK 。之后便会看到编译进度条,根据每个人机器的配置,编译的时间不同。



编译完成之后,自动跳转到Android Studio的主页面。在编译的工程中,会有以下的弹框:
 



之所以有这个弹框,是因为Android Studio默认使用 JAVA 1.7 进行编译,如果你的项目不是 1.7 ,则会弹框让你选择。建议选择 Yes ,因为当你使用 JAVA 1.7 的时候,只要不使用 JAVA 1.7 的资源自动释放这个新特性,能够完美得兼容 JAVA 1.6 的Android设备。

如果你看到下面这个界面,说明你已经导入成功了。

 

直接导入 Eclipse 项目

如果不使用 Generate Gradle build files 导出项目,可以使用Android Studio直接打开 Eclipse 工作空间,进行项目导入。

不使用 Gradle 编译项目

这种方式可以兼容 Eclipse 的文件目录结构,通过版本控制中的文件过滤,可以在一个项目组中,同时使用 Eclipse 和Android Studio。但是在Android Studio中并不是使用 Gradle构建项目,而是使用的 Ant 。

讲解12

打开Android Studio,选择 Import Non-Android Studio project



在弹出的目录选择框中,选择 Eclipse 的工作空间 。

讲解13

接下来回让你选择编译环境。选择 Create project from existing sources 。



讲解14



设置 Android Studio Project 名称以及存放目录。一般默认即可。

点击 Next 。

讲解15



选择资源文件以及资源文件夹。根据你需要导入的项目进行勾选。选择一个项目的时候,你需要选择它依赖的 Library 项目以及他的 src 和 gen 目录。

选择完毕,点击 Next 。

讲解16



选择要导入的 jar 。第一个 .mylyn 是 Eclipse 插件的内容,我们需要手动过滤掉,其他的根据你的需要,进行选择。

选择完毕,点击 Next 。

讲解17



选择Android Studio识别出的 Module ,也就是 Eclipse 中的 Project 。勾选你想导入的项目即可。

选择完毕,点击 Next 。

讲解18



选择编译的 SDK 。在这里,你需要选择 Android SDK ,最好和之前使用 Eclipse 时使用的SDK一样。同样,你也可以再次进行一些简单的环境设置,在此就不说了。

选择完毕,点击 Next 。

讲解19



选择识别出的 AndroidManifest.xml 文件。默认全部勾选即可。

点击 Finish ,Android Studio就开始导入项目了。

讲解18

在导入的过程中,如果Android Studio识别出原项目的依赖关系,便会弹出对话框让你进行选择。如果想保持之前的依赖关系,点击 OK 即可。



当你看到这个界面,就表示导入成功了。项目使用 Ant 构建,并不是Android Studio 默认的 Gradle 。

 

使用 Gradle 编译项目

本方法有一个缺点就是,一次只能导入一个 Eclipse 项目。对于那些只使用到了官方系列的支持包的 Eclipse 项目来说,会方面很多,而且同时兼容 Eclipse 文件目录结构。

讲解19

打开Android Studio,选择 Import Non-Android Studio project



在弹出的目录选择框中,选择 你想导入的项目所在的目录,而不是 Eclipse 的工作空间 。



讲解20 

Android Studio识别出你的项目是一个 Eclipse Android 项目,它将重新使用 Gradle 构建项目。

Android Studio会完整复制项目文件到一个新的目录中,你需要设置这个新目录的地址。



设置完毕,点击 Next 。

讲解21

将之前 Ant 架构改变为 Gradle 架构。

 

  • Replace jars with dependencies,when possible :将 Ant 的 jar 依赖关系使用 dependencies 重构。
  • Replace library sources with dependencies,when possible :将 Ant 的 library 项目的依赖关系使用 dependencies 重构。
  • Create Gradle-style(cameCase) module names :使用 Gradle 的样式构建Android Studio的 Module名称。


建议全选,点击 Finish 。Android Studio开始编译项目,同时进入Android Studio主页面。

同样的,在编译的过程中,依然会提示你语言等级的问题,选择 Yes 。

 

导入Android Studio项目

Android Studio项目,指的是使用 Gradle 进行构建的项目。默认的文件结构如下:

project-name
+ app/
    + src/
        + main/
            + assets/
            + java/
                + package
                ...
            + res/
                + drawable/
                ...
                + layout
                ...
                + values
                ...
            | Androidmanifest.xml
    | build.gradle
+ gradle/
    + wrapper/
        | gradle-wrapper.jar
        | gradle-wrapper.properties
| build.gradle
| gradlew
| gradlew.bat
| settings.gradle



有的一些Android Studio项目有对 Eclipse 做兼容处理,项目结构看起来和 Eclipse 是相同的。

讲解22

当你从网络上或者其他地方获取到一份Android Studio项目源码时,你希望能够导入到Android Studio中。首先,你需要先对这份源码进行一些修改。具体的修改内容,请参照 讲解8 。

打开Android Studio,选择 Open an existing Android Studio project



在弹出的路径选择框中,选择你要导入的Android Studio项目,点击 OK 。

讲解23

然后会弹出和 讲解11 相同的页面,同样,和 讲解11 进行一样的设置即可。



之后的步骤,同 讲解11 ,在此不再赘述。

其他导入方式

导入一个项目除了在Android Studio起始页进行导入之外,你也可以在Android Studio主页中进行导入。
File --> Import Project 或者 File --> Import Module 。



导入的过程和前面的讲解都是一样的,就不在赘述了。

 

 

鉴于Android官网上下载很慢,Android Studio等已在网盘分享:Android Studio 网盘下载路径:

windows:http://yunpan.cn/cfTszP2wrJxdD (提取码:70b4)

Linux:http://yunpan.cn/cfTspUFzu2qqv (提取码:b9d3)

Mac:http://yunpan.cn/cfTsILm8hKpTB (提取码:4de0)

 

JDK1.7

Linux :http://yunpan.cn/cfTshyK9BGf7j (提取码:4a45)

...
浏览 : 7352 阅读全文

id ,NSObject, id<NSObject>区别

Wed, 05 Nov 2014 14:24:55 GMT

我们经常会混淆以下三种申明(我是没有留意过):
    1. id foo1;
    2. NSObject *foo2;
    3. id<NSObject> foo3;


    第一种是最常用的,它简单地申明了指向对象的指针,没有给编译器任何类型信息,因此,编译器不会做类型检查。但也因为是这样,你可以发送任何信息给id类型的对象。这就是为什么+alloc返回id类型,但调用[[Foo alloc] init]不会产生编译错误。

    因此,id类型是运行时的动态类型,编译器无法知道它的真实类型,即使你发送一个id类型没有的方法,也不会产生编译警告。

    我们知道,id类型是一个Objective-C对象,但并不是都指向继承自NSOjbect的对象,即使这个类型和NSObject对象有很多共同的方法,像retain和release。要让编译器知道这个类继承自NSObject,一种解决办法就是像第2种那样,使用NSObject静态类型,当你发送NSObject没有的方法,像length或者count时,编译器就会给出警告。这也意味着,你可以安全地使用像retain,release,description这些方法。


    因此,申明一个通用的NSObject对象指针和你在其它语言里做的类似,像java,但其它语言有一定的限制,没有像Objective-C这样灵活。并不是所有的Foundation/Cocoa对象都继承息NSObject,比如NSProxy就不从NSObject继承,所以你无法使用NSObject*指向这个对象,即使NSProxy对象有release和retain这样的通用方法。为了解决这个问题,这时候,你就需要一个指向拥有NSObject方法对象的指针,这就是第3种申明的使用情景。

    id<NSObject>告诉编译器,你不关心对象是什么类型,但它必须遵守NSObject协议(protocol),编译器就能保证所有赋值给id<NSObject>类型的对象都遵守NSObject协议(protocol)。这样的指针可以指向任何NSObject对象,因为NSObject对象遵守NSObject协议(protocol),而且,它也可以用来保存NSProxy对象,因为它也遵守NSObject协议(protocol)。这是非常强大,方便且灵活,你不用关心对象是什么类型,而只关心它实现了哪些方法。

    现在你知道你要用什么类型了不?

    如果你不需要任何的类型检查,使用id,它经常作为返回类型,也经常用于申明代理(delegate)类型。因为代理类型通常在运行时,才会检查是否实现了那些方法。
 

    如果真的需要编译器检查,那你就考虑使用第2种或者第3种。很少看到NSObject*能正常运行,但id<NSObject>无法正常运行的。使用协议(protocol)的优点是,它能指向NSProxy对象,而更常用的情况是,你只想知道某个对象遵守了哪个协议,而不用关心它是什么类型。

 

更具体的:

 

1. 我们来看看id的定义,它就是一个指针,它可以指向的类型不仅限于NSObject

[代码]c#/cpp/oc代码:

1 typedef struct objc_class *Class;
2 typedef struct objc_object {
3     Class isa;
4 } *id;
 
2. NSObject*就是 NSObject类型的指针了,它范围较小。
 
3. id<NSObject>是指针,它要求它指向的类型要实现NSObject protocol,
iOS中很多类定义很奇葩,类名叫NSObject,定义个接口也叫NSObject,但是它俩不是一个东东。
 
而NSObject类实现了NSOject接口,所以id<NSObject>可以指向NSObject的对象。
NSObject实现类似这样:

[代码]c#/cpp/oc代码:

1 @interface NSObject <NSObject> {
2     Class isa;
3 }
4
 
如果我们来看看NSProxy的定义,你会发现,它不是继承自NSObject,但是却实现了NSObjecct接口,
NSProxy定义类似这样:

[代码]c#/cpp/oc代码:

1 @interface NSProxy <NSObject> {
2     Class   isa;
3 }
4
所以id<NSObject>可以指向NSProxy的对象。
...
浏览 : 6818 阅读全文

NSDate常用代码范例

Wed, 05 Nov 2014 14:22:22 GMT

NSDate常用代码范例  NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(Time Interval)运算和日期之间的早晚比较等。

 

1. 创建或初始化可用以下方法

用于创建NSDate实例的类方法有

+ (id)date;

返回当前时间

+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;  

返回以当前时间为基准,然后过了secs秒的时间

+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secs;

返回以2001/01/01 GMT为基准,然后过了secs秒的时间

+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;

返回以1970/01/01 GMT为基准,然后过了secs秒的时间

+ (id)distantFuture;

返回很多年以后的未来的某一天。(比如你需要一个比现在(Now)晚(大)很长时间的时间值,则可以调用该方法。测试返回了4000/12/31 16:00:00)

+ (id)distantPast;

返回很多年以前的某一天。(比如你需要一个比现在(Now)早(小)大很长时间的时间值,则可以调用该方法。测试返回了公元前0001/12/31 17:00:00)

 

...
浏览 : 6096 阅读全文

ios 目录 & 备份

Wed, 05 Nov 2014 14:20:06 GMT

 [1] 一些重要的 app 目录 
   <Application_Home>/AppName.app 
   这个是存放 app bundle 文件的目录,不要往这个目录中写入其他内容。在 iOS2.1 之后 ituns 同步时不会备份这个目录。ituns 在第一从 app store 购买应用并安装时会做一次同步备份,之后的同步不会备份。 

   <Application_Home>/Documents 
   这个目录存放用户 documents 和 app data files. 这个目录中的内容可以通过共享给用户。 ituns 同步时会备份此目录中的内容。 

   <Application_Home>/Library 
   这个目录是一个用来存放非用户文件的顶级目录,Library 目录下会有一些标准的子目录,你也可以添加自定义的子目录。这个目录下的内容,除 Caches 子目录外,会在ituns 同步时备份。 

   <Application_Home>/Library/Preferences 
   这个目录用来存放 app 指定的 preferences files.需要使用 NSUserDefaults 类 或者 CFPreferences API 来设置/获取 app preferences. 这个目录中的内容会被 ituns 备份。 

   <Application_Home>/Library/Caches 
   这个目录用来写入一些  app 的支持文件,比如app 启动后需要持久化的一些data,你的app 负责写入和移除此目录中的内容。在 iOS2.2 之后,这个目录内容不会被 ituns 备份。 

   <Application_Home>/tmp/ 
   这个目录用来写入临时文件,而不是应用需要持久化的data. 当文件不再使用你的 app 应该负责删除这些内容。如果你的应用不再运行,系统会删除这个文件夹中的内容。iOS 2.1 
之后这个文件夹的内容不会被 ituns 备份。 

  [2] 大小写敏感的文件系统 
   iOS 系统大小写敏感 Case-Sensitive 

  [3] 与 desktop 计算机共享文件 
   文件共享可以使你的 app 和 desktop 计算机之间共享文件。 

  (5) 备份和恢复 Backup and Restore 
   ituns 会自动处理 app 数据的备份和恢复,但你需要了解哪些目录中的内容会被备份 

   [1] 备份什么 
    你的 app 不需要为备份/恢复做什么特殊准备。在 iOS 2.2 之后,当设备连接到一个计算机并同步后,ituns 会自动增量备份所有文件,除了以下目录中的内容不会备份 

  • <Application_Home>/AppName.app
  • <Application_Home>/Library/Caches
  • <Application_Home>/tmp

  

  尽管 ituns 会备份 app bundle 内容 (<Application_Home>/AppName.app),但是只是在第一次从 app store 上下载安装时备份,之后的连接同步不会备份这目录的内容。为了防止同步时间过长,你应该选择保存data 的目录, <Application_Home>/Documents 用来存放用户文档和 app data, 这些内容会被备份。对于临时产生的文件需要存放在 <Applicaiton_Home>/tmp 中,他不会被 ituns 备份。 如果你的 app 需要保存数据为下次 app 启动时使用,而且这些数据也不需要 ituns 备份,保存到文件<Application_Home>/Library/Caches 目录中。 

...
浏览 : 6724 阅读全文

ios 正则表达式

Wed, 05 Nov 2014 14:19:30 GMT

1 【-100,100】之间最多带两位小数的数,例如:-100, -100.0, -99.1, ...

 

NSString *string = <...your source string...>;
NSError  *error  = NULL;

NSRegularExpression *regex = [NSRegularExpression 
  regularExpressionWithPattern:@"\\W-?1?[0-9]{2}(\\.[0-9]{1,2})?\\W"
                       options:0
                         error:&error];

NSRange range   = [regex rangeOfFirstMatchInString:string
                              options:0 
                              range:NSMakeRange(0, [string length])];
NSString *result = [string substringWithRange:range];
(\b|-)(100(\.0+)?|[1-9]?[0-9](\.[0-9]{1,2})?\b

 

Explanation:

(\b|-)      # word boundary or -
(           # Either match
 100        #  100
 (\.0+)?    #  optionally followed by .00....
|           # or match
 [1-9]?     #  optional "tens" digit
 [0-9]      #  required "ones" digit
 (          #  Try to match
  \.        #   a dot
  [0-9]{1,2}#   followed by one or two digits
 )?         #   all of this optionally
)           # End of alternation
\b          # Match a word boundary (make sure the number stops here).
...
浏览 : 7594 阅读全文

XCode debug 常用命令

Wed, 05 Nov 2014 14:17:52 GMT
  1. 命 令                        解释  
  2. break NUM               在指定的行上设置断点。  
  3. bt                      显 示所有的调用栈帧。该命令可用来显示函数的调用顺序。  
  4. clear                   删 除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。  
  5. continue                继续执行正在调试的程序。该命令用在程序 由于处理信号或断点而  
  6.                         导致停止运行 时。  
  7. display EXPR            每次程序停止后显示表达式的值。表达式由程序定 义的变量组成。  
  8. file FILE               装载指定的可执行文件进行调试。  
  9. help NAME               显 示指定命令的帮助信息。  
  10. info break              显 示当前断点清单,包括到达断点处的次数等。  
  11. info files              显 示被调试文件的详细信息。  
  12. info func               显示所有的函数名称。  
  13. info local              显 示当函数中的局部变量信息。  
  14. info prog               显示被调试程序的执行状 态。  
  15. info var                显示所有的全局和静态变量名称。  
  16. kill                    终 止正被调试的程序。  
  17. list                    显示源代码段。  
  18. make                    在 不退出 gdb 的情况下运行 make 工具。  
  19. next                    在 不单步执行进入其他函数的情况下,向前执行一行源代码。  
  20. print EXPR              显 示表达式 EXPR 的值。  
  21.   
  22. print- object            打印一个对象  (简称为po)
  23. print (intname      打印一个类型  
  24. print- object [artist description]   调用一个函数  (artist是一个对象)
  25. set artist @"test"    设置变量值  
  26. whatis                      查 看变理的数据类型  
...
浏览 : 8228 阅读全文

ios 内存管理(2)

Wed, 05 Nov 2014 14:15:24 GMT

集中与iOS的多核编程和内存管理,大家完全可以使用苹果的多核编程框架来写出更加responsive的应用。

 

多核运算

    在iOS中concurrency编程的框架就是GCD(Grand Central Dispatch), GCD的使用非常简单。它把任务分派到不同的queue队列来处理。开发者把任务代码装到一个个block里面,操作系统把这些任务代码分派到不同的资源里去处理,一个简单的例子来说,为什么初学者写tableview的时候,滑动列表时总会很卡,因为很多初学者把图片装载放到main thread主线程去执行,例如我们要滑动畅顺的话,iOS最快可以1秒内刷新60次,如何你的一个cell的文字和图片装载超过1/60秒的话,自然就会卡。所以一般我们会把图片装载这些需要多点时间的移出main thread来处理,对于用GCD来说,就是把图片载入放到另外一个queue队列中来异步执行,当资源准备好了后,放回到main thread中显示出来。main thread在GCD中就是main queue。

...
浏览 : 6292 阅读全文

ios 内存管理(1)

Wed, 05 Nov 2014 14:14:52 GMT

此文涉及的内存管理是针对于继承于NSObject的Class。

一 基本原理

Objective-C的内存管理机制与.Net/Java那种全自动的垃圾回收机制是不同的,它本质上还是C语言中的手动管理方式,只不过稍微加了一些自动方法。

1           Objective-C的对象生成于堆之上,生成之后,需要一个指针来指向它。

ClassA *obj1 = [[ClassA alloc] init];

 

2           Objective-C的对象在使用完成之后不会自动销毁,需要执行dealloc来释放空间(销毁),否则内存泄露。

[obj1 dealloc];

         这带来了一个问题。下面代码中obj2是否需要调用dealloc?

ClassA *obj1 = [[ClassA alloc] init];

ClassA *obj2 = obj1;

[obj1 hello]; //输出hello

[obj1 dealloc];

[obj2 hello]; //能够执行这一行和下一行吗?

[obj2 dealloc];

         不能,因为obj1和obj2只是指针,它们指向同一个对象,[obj1 dealloc]已经销毁这个对象了,不能再调用[obj2 hello]和[obj2 dealloc]。obj2实际上是个无效指针。

         如何避免无效指针?请看下一条。

 

3           Objective-C采用了引用计数(ref count或者retain count)。对象的内部保存一个数字,表示被引用的次数。例如,某个对象被两个指针所指向(引用)那么它的retain count为2。需要销毁对象的时候,不直接调用dealloc,而是调用release。release会让retain count减1,只有retain count等于0,系统才会调用dealloc真正销毁这个对象。

...
浏览 : 7184 阅读全文

Object-C 类,对象,运行时,isa

Wed, 05 Nov 2014 14:12:59 GMT

   如果不是Apple,不是App Store,Object-C恐怕早就淡出人们的视线了。大部分编程语言都是基于C语法风格的,所以初次接触这个非C风格的语言,会看不懂它那怪异的语法。但如果掌握了它之后,也并不会觉得它又太多的不同。今天记录一下它的底层运作。
       1: 类Class:
      
 typedef struct objc_class * Class;
     从Class的定义可以看出,它是一个 objc_class 结构类型的指针,objc_class又是什么呢?
   

struct objc_class
{
    struct objc_class* isa;
    struct objc_class* super_class;  //root的为null
    const char* name;
    long version;
    long info;
    long instance_size;
    struct objc_ivar_list* ivars;
    struct objc_method_list** methodLists;  //方法列表
    struct objc_cache* cache;     //缓存最近使用的方法,以提高效率;
    struct objc_protocol_list* protocols;
};
      为什么Class的第一个成员也是Class呢,它的内存布局岂不是和底下的object一样了?其实这就是类对象(class object)与实例对象(instance object)的区别了。
     Object-C对类对象与实例对象中的 isa 所指向的类结构作了不同的命名:类对象中的 isa 指向类结构被称作 metaclass,metaclass 存储类的static类成员变量与static类成员方法(+开头的方法);实例对象中的 isa 指向类结构称作 class(普通的),class 结构存储类的普通成员变量与普通成员方法(-开头的方法).
  
     2:对象id:
     typedef struct objc_object {
         Class isa;
     } *id;
    可以发现, id可以用来表示任意一个对象,它是一个 objc_object 结构类型的指针,其第一个成员是一个 objc_class 结构类型的指针。
    我们的根类NSObject也同样是只有一个Class成员:
   @interface NSObject <NSObject> {
       Class       isa;
    }
    这个isa到底是什么呢?官方介绍是这样的:

    Every object is connected to the run-time system through its isa instance variable, inherited from the NSObject class.isa identifies the object's class; it points to a structure that's compiled from the class definition. Through isa, an object can find whatever information it needs at run timesuch as its place in the inheritance hierarchy, the size and structure of its instance variables, and the location of the method implementations it can perform in response to messages.
    可见,一个对象(Object)的isa指向了这个对象的类(Class),而这个对象的类(Class)的isa指向了metaclass。这样我们就可以找到静态方法和变量了。


       3: 运行时: 
     Objective-C的运行时是动态的,它能让你在运行时为类添加方法或者去除方法以及使用反射。这在其它语言是不多见的。
       

     类的实例对象的 isa 指向它的类;类的 isa 指向该类的 metaclass;
     类的 super_class 指向其父类,如果该类为根类则值为 NULL;
     metaclass 的 isa 指向根 metaclass,如果该 metaclass 是根 metaclass 则指向自身;
     metaclass 的 super_class 指向父 metaclass,如果该 metaclass 是根 metaclass 则指向该 metaclass 对应的类;
     Object-C 为每个类的定义生成两个 objc_class ,一个普通的 class,另一个即 metaclass。我们可以在运行期创建这两个 objc_class 数据结构,然后使用 objc_addClass将 class 注册到运行时系统中,以此实现动态地创建一个新的类。
 
...
浏览 : 7070 阅读全文