摸鱼学Antroid 二(简介)
1 Android架构
这里就不偷架构图了,到处都有,简单了解一下
Android操作系统大致分为4个层:
- Linux内核层,提供系统基础功能,比如进程管理、内存管理等
- 程序库层,诸如音频播放、浏览器的库等
- 应用框架层,以Java类的形式为应用程序提供服务
- 应用程序层,开发者写的应用程序
2 应用程序组件
应用程序组件是一个Android应用程序的基本构建块。
AndroidManifest.xml描述了应用程序的每个组件,以及他们如何交互。
以下是可以在Android应用程序中使用的四个主要组件。
组件 | 描述 |
---|---|
Activities | 描述UI,并且处理用户与机器屏幕的交互。 |
Services | 处理与应用程序关联的后台操作。 |
Broadcast Receivers | 处理Android操作系统和应用程序之间的通信。 |
Content Providers | 处理数据和数据库管理方面的问题。 |
Activities
一个活动标识一个具有用户界面的单一屏幕。每个活动都是Activity类的子类:
public class MainActivity extends Activity {
}
Services
服务是运行在后台,执行长时间操作的组件。每个服务都是Service类的子类:
public class MyService extends Service {
}
Broadcast Receivers
广播接收器简单地响应从其他应用程序或者系统发来的广播消息。广播接收器是BroadcastReceiver类的一个子类,每个消息以Intent对象的形式来广播:
public class MyReceiver extends BroadcastReceiver {
}
Content Providers
内容提供者组件通过请求从一个应用程序到另一个应用程序提供数据。内容提供者是ContentProvider类的子类,并实现一套标准的API,以便其他应用程序来执行事务:
public class MyContentProvider extends ContentProvider {
}
3 附件组件
有一些附件的组件用于以上提到的实体、他们之间逻辑、及他们之间连线的构造。这些组件如下:
组件 | 描述 |
---|---|
Fragments | 代表活动中的一个行为或者一部分用户界面。 |
Views | 绘制在屏幕上的UI元素,包括按钮,列表等。 |
Layouts | 控制屏幕格式,展示视图外观的View的继承。 |
Intents | 组件间的消息连线。 |
Resources | 外部元素,例如字符串资源、常量资源及图片资源等。 |
Manifest | 应用程序的配置文件。 |
4 Android项目
1)目录说明
src
包含项目中所有的.java源文件,默认情况下,它包括一个 MainActivity.java源文件对应的活动类,当应用程序通过应用图标启动时,将运行它。
gen
包含由编译器生成的.R文件,引用了所有项目中的资源。该文件不能被修改。
build
包含Android由APT构建的.apk包文件,以及运行Android应用程序所需要的其他所有东西。
调试时默认生成的apk在:build/outputs/apk目录下
PS: Eclipse在bin目录下生成
res/drawable-hdpi
包括所有的为高密度屏幕设计所需的drawable对象。
res/layout
存放由于定义用户界面的文件。
res/values
存放各种各样的包含一系列资源的XML文件,比如字符串和颜色的定义。
2)文件说明
AndroidManifest.xml
应用程序的清单文件,描述了应用程序的基础特性,定义它的各种组件。
无论开发什么组件用作应用程序中的一部分,都需要在应用程序项目根目录下的manifest.xml文件中声明所有的组件。这个文件是Android操作系统与应用程序之间的接口,因此,如果没有在这个文件中声明组件,将无法被操作系统所识别。默认的清单文件如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.helloworld"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="22" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
PS:
- andnroid:icon属性指出位于res/drawable-hdpi下面的应用程序图标。使用drawable文件夹下名为ic_launcher.png的图片
- @string指的是strings.xml
- @style指的是styles.xml
- 不同的标签指定不同的Android应用程序组件,代码中标识一个活动
MainActivity.java
编写主要活动代码,这是实际的应用程序文件,将被转化为Dalvik可执行文件并运行。默认代码如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
PS: 这里的R.layout.activity_main引用自res/layout目录下的activity_main.xml文件。
Strings.xml
strings.xml文件在res/value文件夹下,它包含应用程序使用到的所有文本。默认内容如下:
<resources>
<string name="app_name">HelloWorld</string>
</resources>
R.java
gen/com.example.helloworld/R.java文件是活动的Java文件(如MainActivity.java)和资源(如strings.xml)之间的胶水。这是一个自动生成的文件,不要修改R.java文件的内容。
Layout文件
在res/layout目录下,每个活动对应一个文件,默认有一个activity_main.xml,当应用程序构建它的界面时被引用。默认内容如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
PS: TextView是一个文本控件,有诸多属性。
5 程序打包签名
说明
Android APP都需要用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的。
平时调试运行时到手机上时,是AS会自动用默认的密钥和证书来进行签名;但是自己发布编译时,则不会自动签名,这个时候需要进行手动签名。
签名的好处:
- 应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。
- 应用程序模块化: Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行。
- 代码或者数据共享: Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。
步骤
- 点击菜单 Build -> Generate Signed APK…
- 创建一个Key,有的话就选择存在的Key
- 点击OK,填入密码信息
- Next
- Finish
- 打包完成,apk在app目录下
- 验证签名命令,命令行执行
jarsigner -verbose -certs -verify apk名字