文章目录
- 应用组件
- Intent
- 清单文件
- 应用资源
- 应用权限
- XML解析方式
- NDK(Native Develop Kit)
- 使用场景
- 编译和调试原生代码组件
- 创建或导入原生项目
- 工作原理
- CPU和架构
- ABI
- 参考
应用组件
- Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。
- BroadcastReceiver 借助广播接收器组件,系统能够在常规用户流之外向应用传递事件,从而允许应用响应系统范围内的广播通知。由于广播接收器是另一个明确定义的应用入口,因此系统甚至可以向当前未运行的应用传递广播。
- Service 是一个通用入口点,用于因各种原因使应用在后台保持运行状态。它是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。Service 不提供界面。
- ContentProvider 管理一组共享的应用数据,您可以将这些数据存储在文件系统、SQLite 数据库、网络中或者您的应用可访问的任何其他持久化存储位置。其他应用可通过内容提供程序查询或修改数据(如果内容提供程序允许)。
四种组件类型中,有三种(Activity、Service、BroadcastReceiver)均通过异步消息 Intent
进行启动。Intent 会在运行时对各个组件进行互相绑定。您可以将 Intent 视为从其他组件(无论该组件是属于您的应用还是其他应用)请求操作的信使。
Intent
https://developer.android.google.cn/guide/components/intents-filters.html
注意:如果您使用 Intent 来启动 Service,请使用显式 Intent 来确保应用的安全性。使用隐式 Intent 启动服务存在安全隐患,因为您无法确定哪些服务将响应 Intent,且用户无法看到哪些服务已启动。
清单文件
在 Android 系统启动应用组件之前,系统必须通过读取应用的清单文件 (AndroidManifest.xml) 确认组件存在。您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中。
// 声明组件
<activity>
<service>
<receiver>
<provider>
除了声明应用的组件外,清单文件还有许多其他作用,如:
- 确定应用需要的任何用户权限,如互联网访问权限或对用户联系人的读取权限。
- 根据应用使用的 API,声明应用所需的最低 API 级别。
- 声明应用使用或需要的硬件和软件功能,如相机、蓝牙服务或多点触摸屏幕。
- 声明应用需要链接的 API 库(Android 框架 API 除外),如 Google 地图库。
声明组件功能
<activity android:name="com.example.project.ComposeEmailActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<data android:type="*/*" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
声明应用要求
Android 设备多种多样,但并非所有设备都提供相同的特性和功能。以防将您的应用安装在缺少应用所需特性的设备上,您必须通过在清单文件中声明设备和软件要求,为该应用支持的设备类型明确定义一个配置文件。其中的大多数声明只是为了提供信息,系统并不会读取它们,但 Google Play 等外部服务会读取它们,以便在用户通过其设备搜索应用时为用户提供过滤功能。
<manifest ... >
<uses-feature android:name="android.hardware.camera.any"
android:required="true" />
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
...
</manifest>
应用资源
Android 应用并非仅包含代码,它还需要与源代码分离的资源,如图像、音频文件以及任何与应用的视觉呈现有关的内容。
应该始终外部化应用资源,如图像和代码中的字符串,有利于单独维护这些资源。此外,还应为特定设备配置提供备用资源,方法是将它们分组到专门命名的资源目录中。
应将各类资源放入项目 res/
目录的特定子目录中。 如下:
- animator/:定义属性动画的 XML 文件。
- anim/:定义补间动画的 XML 文件。(属性动画也可以放在该目录,一般为了区分,首选上面的目录。)
- color/:定义颜色状态列表的xml文件。
- drawable/:图片或xml文件
- mipmap/:适用于不同启动器图标密度的可绘制对象文件。
- layout/
- menu/:定义应用菜单的xml文件。
- raw/:以原始形式保存的文件。但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/目录下
- values/
- xml/:可以在运行时通过调用 Resources.getXML() 读取的任意XML文件。
- font/
提供备用资源 在res/中创建一个以<resources_name>-<config_qualifier>
形式命名的新目录。
配置 | 限定符值 | 说明 |
屏幕像素密度 (dpi) | ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi、nodpi、tvdpi、anydpi |
创建别名资源
应用权限
XML解析方式
- SAX
- DOM
- Pull
NDK(Native Develop Kit)
https://developer.android.google.cn/ndk 原生开发工具包(NDK)是一套工具,允许您为 Android 使用C和C++代码,并提供众多平台库,您可用其管理原生Activity和访问物理设备组件,例如传感器和触摸输入。
借助Android Studio 2.2或更高版本,使用NDK将C和C++代码编译到原生库中,然后使用IDE集成构建系统 Gradle将您的库封装入APK。然后,Java代码可以通过Java原生接口 (JNI) 框架,调用您原生库中的函数。
Android Studio用于编译原生库的默认构建工具是CMake。由于很多现有项目都使用构建工具包,因此Android Studio也支持ndk-build。不过,如果您要创建新的原生库,则应使用 CMake。
使用场景
- 在平台之间移植其应用。
- 进一步提升设备性能,以实现低延迟时间,或运行计算密集型应用,如游戏或物理模拟。
- 重复使用自己或其他开发者的C或C++库。
编译和调试原生代码组件
Android 原生开发工具包 (NDK):这套工具允许您为 Android 使用 C 和 C++ 代码。
CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
LLDB:一种调试程序,Android Studio 使用它来调试原生代码。
安装:Tools > SDK Manager
创建或导入原生项目
工作原理
CPU和架构
使用原生代码时,硬件很重要。NDK提供各种ABI供您选择,可让您确保针对正确的架构和CPU进行编译。
ABI
不同的Android手机使用不同的CPU,进而支持不同的指令集。CPU与指令集的每种组合都有专属的应用二进制界面,即ABI。ABI可以非常精确地定义应用的机器代码在运行时如何与系统交互。您必须为应用要使用的每个CPU架构指定ABI。
参考