工欲善其事,必先利其器。
磨刀不误砍柴工。

Andriod Studio / SDK下载与配置

不管进行什么开发,至少需要SDK,IDE是可选的,这个道理我懂。但是Android官方主页的说明有点误人子弟:Android Studio for 32bit Windows的版本明确写了”No Android SDK”,而for linux 的版本则没有这样的说明,但其实应该也是不包含SDK的(至少我感觉我有点被坑了)。

的确,只下载SDK也是可以的:

Get just the command line tools
If you do not need Android Studio, you can download the basic Android command line tools below. You can use the included sdkmanager to download other SDK packages.

尝试在AS中下载SDK,事实证明这是一个悲剧。先是出现sdk update sites(那些站点正常情况下铁定连不上) 不能uncheck的情况,也许是由于我过于自信地启用了仅限于可连接但速度奇慢的proxy、下载并配置了官方repo引起的。stackoverflow里有人问到了相同的问题,但没有回答。总之,我把主目录下dot打头的android目录都删掉,执行了一次dnf update(升级了100多个包,kernel版本从4.9.13升级到4.10.5),并且不启用proxy,sdk update sites里那些不太可能连上的条目终于没有了(只剩下一个dl.google.com/android/repository2-1.xml依然顽强地存在,导致AS每次启动都会尝试连接这个url,相当费时)。但这并未解决SDK的下载问题,网上搜到的使用国内镜像的参考说明也和我在AS中看到的界面不一样。难道是因为我使用的AS版本比较新,参考说明都过时了?

简书上的一篇文章(见文末参考链接)给出的信息终于让在黑暗中摸索的我看到了一丝光亮。Android SDK通过tools(Update:确切的说,是通过其中”included sdkmanager”)下载(如果我没理解错的话)。neusoft提供了这个包的镜像,链接在这里(版本不完全一样),下载后运行tools/andriod,按照配置说明从neusoft下载SDK、Build Tools、Api等等。(具体需要哪些我也不清楚,都是在建了一个helloworld工程后,提示我缺什么再回头下载的,那叫一个费劲。)

好吧,关于SDK的下载安装,我再捋一捋。

  • 应该可以在AS中可以对SDK进行下载和管理,点击Tool->Android->SDK Manager,配置好合适SDK Update Sites,下载安装也是ok的。估计墙外普通青年一般都这么干,没毛病(但是我没有成功过)。

  • Andoid也提供了独立的工具进行SDK的下载和管理,这就是前面提到的tools,运行后的界面是下面这样。关于如何在国内下载和配置Android SDK,能够找到的大部分参考都是使用tools的(当然都是中文的),比如neusoft的配置说明。我一开始是在AS中尝试这些方法,发现界面总是和别人描述的不一样,问题就出在这。

Step1: Hello world running on AVD Emulator

首次构建的时候需要下载gradle,不知道这是什么鬼(Update:类似cmake的自动构建工具?),总之它就开始自顾自地从官方主页下载,我耐着性子试过几次,从来没有成功/完成过。可以修改MyApplication/gradle/wrapper/gradle-wrapper.properties这个文件里的distributionUrl,FOR God’s Sake,改成你知道的比较快的镜像地址。或者提前把多个版本的gradle准备好(Update: 似乎比较困难,因为~/.gradle下的目录结构比较奇怪,比如3.3版本的目录是~/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/,不知道这个55gk*是啥玩意儿)。

另外,模拟器硬件选x86架构(或者应该说选用和开发机相同的处理器架构?),运行起来”is 10x times faster…”,这也是在首次构建完成、运行的时候AS给出的提示。

第一个android app终于在模拟器上跑起来了。这有可能是多年来我完成的最为费劲的一个helloworld。如果很多人也像我一样求速成,可能还没到这一步就放弃了,是不是也是android开发的一种门槛?不过话又说回来,如果是在Windows系统,并且一上来就从国内镜像站点下载已集成SDK的AS bundle版本,我遇到的这些问题压根儿不会发生。

helloworld的截图,留作纪念:-)

What is Gradle, …

对于新手来说,希望弄清楚开发环境包含了那些东西,分别是干什么用的。现在试着回答这些问题。

  • Android Studio
    IDE,集成开发环境,比如QtCreator,VisualStudio。
  • Android SDK
    真正干活的、性格古怪的家伙,当然AS把它该做的事情也完成的很好;-)
    • Tools
      包括各种平台下的emulator,估计用于运行虚拟设备;另外还有一个名为android的脚本,用来启动Android SDK Manager,下载和管理SDK。
    • Platform-tools
      包括adb、fastboot等工具,估计用于向虚拟设备装载sys-img,以及实现虚拟设备与调试器之间的数据通信。
    • Build-tools
      实际的构建工具,包括各种cc、ld等,从源代码生成目标平台的二进制码。使用最新版本就好。
    • Andoid 7.1.1 (API 25)
      构建具体版本Android应用需要的API,我目前手机(Honor 4x)运行的版本是4.4.4。各个版本对应SDK目录下的platforms和sources目录。
    • Extra
      核心应用API之外的服务,例如USB调试、Web、Google地图等。
  • Gradle
    Android的自动构建系统,比如cmake。
  • addon.xml / sys-img.xml / …
    sys-img是用于不同系统版本(15/16/25)、不同架构(arm/mips/x86)、不同类型(phone/tv/pad)虚拟设备的二进制码。system.img和userdata.img都比较大(一般上G或数百M),根据需要选择。

下面是手绘的草图,用来说明以上这些东西在开发调试过程中所处的位置、相互关系,代表了我目前的理解。

Step2: Hello world running on real hardware

把手机通过USB连接到开发电脑上,并且在开发人员选项中启用调试功能,AVD自动发现了手机设备,调试运行的时候直接把这个Helloworld app安装在我的手机上了(首页出现一个看着很糙的绿色Android小人儿图标)。运行正常。

但是通过文件的方式把生成的ipk传到手机上安装没有成功。

Update: 新建工程,全部使用默认设置,Min Sdk Verison选择 API 15,未对manifests进行修改,生成的app-debug.ipk在手机安装成功,运行正常。


可能比较有用的链接

http://www.flysnow.org/2017/03/05/tools_mirrors_update.html
http://www.jianshu.com/p/36cfa1614d23