惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Martin Fowler
Martin Fowler
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Last Watchdog
The Last Watchdog
S
Schneier on Security
C
Cisco Blogs
P
Privacy International News Feed
T
Tenable Blog
Spread Privacy
Spread Privacy
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
News and Events Feed by Topic
Security Archives - TechRepublic
Security Archives - TechRepublic
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
Project Zero
Project Zero
GbyAI
GbyAI
N
Netflix TechBlog - Medium
T
Tor Project blog
雷峰网
雷峰网
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Threat Research - Cisco Blogs
Cyberwarzone
Cyberwarzone
L
LangChain Blog
MyScale Blog
MyScale Blog
C
CERT Recently Published Vulnerability Notes
C
Check Point Blog
G
Google Developers Blog
T
Tailwind CSS Blog
L
LINUX DO - 热门话题
宝玉的分享
宝玉的分享
IT之家
IT之家
F
Fortinet All Blogs
TaoSecurity Blog
TaoSecurity Blog
Recent Announcements
Recent Announcements
T
The Exploit Database - CXSecurity.com
Hacker News: Ask HN
Hacker News: Ask HN
aimingoo的专栏
aimingoo的专栏
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Google Online Security Blog
Google Online Security Blog
Help Net Security
Help Net Security
H
Hacker News: Front Page
小众软件
小众软件
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
P
Privacy & Cybersecurity Law Blog
T
Threatpost

博客园 - Game_over

零基础使用AI辅助编写易简历小程序的一些心得体会 趁五一撸个纯Flutter版的心情日记App 两个星期,用Flutter撸个APP 程序员之路:以Android证道 10天学安卓-第十天 10天学安卓-第九天 10天学安卓-第八天 10天学安卓-第七天 10天学安卓-第六天 10天学安卓-第四天 10天学安卓-第三天 10天学安卓-第二天 10天学安卓-第一天 个人开发一些Android App Android 一些开源的东西 构建Android自动编译持续集成系统 Android开发视频教学资料 简约而不简单——Android SimpleAdapter Android2.2 新特性
10天学安卓-第五天
Game_over · 2015-01-21 · via 博客园 - Game_over

经过前几天的练习,相信大家已经对如何做出一个简单的界面有了初步的了解,并且已经做出来一个还不错的天气列表了。

今天大家稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念。

Android系统架构

Android系统本质上是Linux系统,但相对于Linux系统,主要在驱动、性能、内存管理、设备管理等一些部分做了比较多的改动,以更适用于移动设备。

Android系统架构图

从上图可以看到,Android系统架构为四层,分别是Linux内核、系统运行库、应用程序框架以及应用层,每一层的作用分别为:

Linux内核

提供了作为一个操作系统所应有的基础功能,包括各种硬件驱动、内存管理、电源管理等,该层作为硬件和软件之间的抽象层而存在。

系统运行库

系统运行库分为两部分,系统库和Android运行时,系统库提供了底层的Sqlite、SSL、OpenGL、Surface Manager等类库,从数据库到网络再到界面绘制,都在这一层进行。

Android运行时,这一部分在Android4.4以前是Dalvik,也就是Google实现的Java虚拟机,所有的Android APP都运行在虚拟机里面,每个Dalvik虚拟机都是一个独立进程。简单的说就是每个Android APP编译之后会打包为APK文件,APK文件内部包含资源文件、代码文件(Dex)、AndroidManifest.xml以及别的配置文件,而Dalvik虚拟机则执行的是Dex文件。

Android4.4以后,启用了Dalvik虚拟机,而改用Android Runtime,根据Google的说明,新的Android Runtime会有更好的效率,执行速度更快、耗电更少、占用内存更低。

应用程序框架

这一层就是我们代码可以直接调用的了,通常所说的Android API都会在这一层提供,主要包括Activity Manager、Window Manager、Content Provider等,等我们对系统有了更多的学习之后,会慢慢用到其中的一部分内容。

应用层

这一层就是我们平时可以操作的APP了。Android本身既是个操作系统,又提供了基础的APP,如SMS、Phone、Browser等,当然了,更多的APP是需要我们程序员来实现的。

了解了Android系统的基础架构后,再结合我们正在开发的天气预报APP来具体的学习一下Android APP项目的一个核心的文件——AndroidManifest.xml。

AndroidManifest

每一个Android项目都包含一个清单(Manifest)文件--AndroidManifest.xml,它存储在项目层次中的最底层,它是Android程序的全局配置文件,可以定义应用程序及其组件的结构和元数据。它包含了组成应用程序的每一个组件(活动、服务、内容提供器和广播接收器)的节点,并使用Intent过滤器和权限来确定这些组件之间以及这些组件和其他应用程序是如何交互的。它还提供了各种属性来详细地说明应用程序的元数据(如它的图标或者主题)的以及额外的可用来进行安全设置和单元测试顶级节点,我们先来看一下天气预报APP的这个文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.demo.weather"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.demo.weather.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我们逐次说明一下,

根节点

根节点定义了包名、版本号,其中package一定是唯一的,android:versionCode是供程序内部使用的版本号,android:versionName则会显示给用户。

uses-sdk

这个节点指定Android应用中所需要使用的SDK的版本,android:minSdkVersion指定可运行的最低版本,android:maxSdkVersion指定可运行的最高版本,android:targetSdkVersion这个指定了目标版本。

指定的版本均为数字,大家可以对照下表参考:

 Android版本  API Level
 5.0  21
 4.4w  20
 4.4  19
 4.3  18
 4.2.2  17
 4.1.2  16
 4.0.3  15
 4.0  14
 3.2  13
 3.1  12
 3.0  11
 2.3.3  10
 2.2  8
 2.1  7
 1.6  4
 1.5  3

关于android:targetSdkVersion这个目标版本很多初学者会疑惑,不明白到底有什么用。我个人的理解是比如你的APP指定了最低版本为8,目标版本为19,你开发过程中做出来的程序在Android4.4的设备上是没有任何问题的,其他的版本Android系统就会进行相应的兼容适配。比如有些API在低版本是不提供的,就需要我们在程序中进行版本判断,进行不同的代码处理。注意,这个时候你指定了最低版本是8,你最低可以使用8的API,在程序编译的时候,你用到了19的API是不会出现编译错误的。

android:maxSdkVersion这个配置一般是不需要设置的,因为系统本身是向下兼容的。

uses-permission

这个节点指定了APP拥有的权限。Android系统对于权限管理是比较严格的,一个APP必须先声明权限才能使用相应的功能。例如需要访问网络,则需要在这里声明一个android.permission.INTERNET权限,相应的如GPS、Camera、VIBRATE等都需要先声明权限才可以使用。

application

这个节点指定了APP的组件、属性,如icon、label、name、theme等。

activity

这个节点是application的子节点,定义了整个APP的所有页面。

其它

除了以上我们用到的几个外,还有receiver、provider、service等,这些我们在以后慢慢熟悉。

一点点实践

了解了Android本身的架构后,我们稍微修改一下manifest文件。

应用图标

icon

把上面的图标放到res\drawable-hdpi文件夹下,然后修改application节点下的android:icon="@drawable/ic_launcher" 为  android:icon="@drawable/icon"

应用名称

打开res\values\strings.xml文件,修改<string name="app_name">Weather</string>为<string name="app_name">天气预报</string>

打完收工,运行程序。

可以发现应用左上角的图标和名称都变成了我们想要的。

device-2015-01-21-165433

今天的内容比较少,主要是一些基础理论知识,也希望大家多多查阅资料,对Android本身的结构有更多更深入的了解。

附件是本次的工程文件,点击下载

此系列文章系本人原创,如需转载,请注明出处 www.liuzhibang.cn