android studio是目前最容易上手的android应用开发工具,这篇blog记录如何从scratch开始建立一个属于自己的apk软件。
1.《深入剖析Android开发-小应用里的大智慧》 张泳,葛丽娜,人民邮电出版社
2.《Learn Android Studio Build Android Apps Quickly and Effectively》, Adam Gerber, Clifton Craig, Apress.
3.AndroidManifest配置之uses-feature
4.android四大组件(应用程序的组成)是什么
5.《疯狂Android讲义》,李刚,电子工业出版社
Android Studio是google为了方便应用开发而提供的IDE,目前最新的版本是4.0,似乎国内还用不了,Android Studio支持Linux、window、mac平台,也有很多介绍安装的博客。在linux下面安装应该是最简单的了,当然也有很多介绍如何hello world的博客,要熟悉这些也得小一天的时间吧。应用开发主要基于java和kotlin,如果是java程序员,学习android app应该非常快,非java也可以学,学习周期要慢很多,很不幸我属于后者,那最快的捷径就是找现成的代码,边改边学应该也不会太慢,就是掉坑会多一些。附录是一些学习路线的link,方便查阅。
对于任何新手,从github android上获取code都是最方便直观和研究代码的途径。当然也可以寻找自己喜欢课题的代码来学习。我提取了wear-os-samples来学习一下吧。
我选了WatchFace这个简单的例子研究一下。首先要看看AndroidManifest.xml文件都有啥:
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.wearable.watchface" >
<!-- Permissions required by the wearable app -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- All intent-filters for config actions must include the categories
com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION and
android.intent.category.DEFAULT. -->
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".DigitalWatchFaceCompanionConfigActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="com.example.android.wearable.watchface.CONFIG_DIGITAL" />
<category android:name="com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".OpenGLWatchFaceConfigActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="com.example.android.wearable.watchface.CONFIG_OPENGL" />
<category android:name="com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
这个例子中只有四大组件的activity。差不多要先学习一下manifest都含有啥。
条目如下:xmlns:android=“http://schemas.android.com/apk/res/android”,引用文献【1】的一张图
对于初学者基本上都记住这些足够了。
package=“com.example.android.wearable.watchface”
一般在程序完成创建的时候,他就有了默认值,例如上面这个例子watchface,应该是创建工程的时候所启用的名字,而在程序运行时,这样一个一package名字运行的进程就会被发现。
uses-permission android:name=“string”
应为android的权限管理纷繁复杂,所以每个应用的manifest都能看到这些权限声明。
默认也可以用第一行来生命,声明一个app在运行时所依赖的外部的硬件或软件特征(feature),uses-feature还提供了一个required属性配置,表示此项依赖的软硬件特征是否是必须的,当它设置为true表示此app运行时必须使用此项特征,如果没有则无法工作,如果它设置为false,表示应用在运行时需要用到这些特征,但如果没有,应用可能会有一部分功能会受到影响,但大部分功能还是可以正常工作。例如一个拍照app,它使用时必须开启设备的摄像头,在没有摄像头的机器上任何功能都无法使用,这就需要通过uses-feature来声明该应用需要摄像头,并将required设置为true。【3】
上述例子的activity
Activity 实现应用的可视化用户接口,一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么Activity就相当于一个网页。在Activity 当中可以添加一些Button、Check box 等控件。可以看到Activity 概念和网页的概念相当类似。
一般一个Android 应用是由多个Activity 组成的。这多个Activity 之间可以进行相互跳转,例如,按下一个Button 按钮后,可能会跳转到其他的Activity。和网页跳转稍微有些不一样的是,Activity 之间的跳转有可能返回值,例如,从Activity A 跳转到Activity B,那么当Activity B 运行结束的时候,有可能会给Activity A 一个返回值。这样做在很多时候是相当方便的。当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。我们可以选择性的移除一些没有必要保留的屏幕,应为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。【4】
Service 在这个例子中没有出现,它也不能自己独立运行,并且可以和其他组件进行交互。Service 是没有界面的长生命周期的代码。Service 是一种程序,它可以运行很长时间,但是它却没有用户界面。这么说有点枯燥,来看个例子。打开一个音乐播放器的程序,这个时候若想上网了,那么,我们打开Android 浏览器,这个时候虽然我们已经进入了浏览器这个程序,但是,歌曲播放并没有停止,而是在后台继续一首接着一首的播放。其实这个播放就是由播放音乐的Service进行控制。当然这个播放音乐的Service也可以停止,例如,当播放列表里边的歌曲都结束,或者用户按下了停止音乐播放的快捷键等。service 可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD 卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。【4】
在Android 中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver 是对发送出来的Broadcast进行过滤接受并响应的一类组件。可以使用BroadcastReceiver 来让应用对一个外部的事件做出响应。【4】
在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他直接访问的。Andorid当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生ContentProvider类, 封装成一枚Content Provider,每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。
manifest还定义了其他很多都在google 开发者上找得到App Manifest Overview。
工欲善其事必先利其器,找本入门,按照书里的方法,熟悉快捷键,熟悉界面,最重要的是熟悉如何可视化编程,中文的可以用【5】来学习了解,英文的【2】是不错的入门指导,当然最好的应该还是Android Studio官方文档,每一个条目都很详尽。这个大约消耗一天的时间,但相关知识的阅读可能需要更久的时间。
最后通过经典的sample组合,再一步一步的学习方法和实践,你想要的app就会出现了,同时很惊奇的发现Android Studio的工程和Pycharm UI如出一辙,所以上手起来也没有什么陌生感,只是如何利用好插件自动生成代码等技巧还需要勤加练习。以我的经验,一个月左右能基本使用工具,完成一个不复杂的app开发,只要使用了activity组件,其他组件浅尝辄止,以后载满满学习。
1.Emulator需要vt-x技术支持,除了在bios里打开,还要注意不能启动虚拟机,这个坑填了一天,直到重启了电脑,先开了Emulator,再打开虚拟机猜恍然大悟。
manifest (安卓开发文件名)
Gradle
Android Studio基本使用
AndroidAudioRecorder
OmRecorder
WaveInApp
AudioRecorder
SoundRecorder
github android