0%

TFLite安卓项目解读

manifests

AndroidManifest.xml

应用清单,这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示界面。

  • 为应用的 Java 软件包命名。软件包名称充当应用的唯一标识符。
  • 描述应用的各个组件,包括构成应用的 Activity、服务、广播接收器和内容提供程序。它还为实现每个组件的类命名并发布其功能,例如它们可以处理的 Intent 消息。这些声明向 Android 系统告知有关组件以及可以启动这些组件的条件的信息。
  • 确定托管应用组件的进程。
  • 声明应用必须具备哪些权限才能访问 API 中受保护的部分并与其他应用交互。还声明其他应用与该应用组件交互所需具备的权限
  • 列出 Instrumentation 类,这些类可在应用运行时提供分析和其他信息。这些声明只会在应用处于开发阶段时出现在清单中,在应用发布之前将移除。
  • 声明应用所需的最低 Android API 级别
  • 列出应用必须链接到的库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.tensorflow.lite.examples.detection">
android:versionCode="1"

android:versionName="1.0.0.1"
<uses-sdk />

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

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/tfe_od_app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.ObjectDetection">

<activity
android:name=".DetectorActivity"
android:label="@string/tfe_od_app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
</manifest>
manifest元素

所有的xml都必须包含元素。这是文件的根节点。并且指明xmlns:android和package属性。它必须要包含元素。

xmlns:android属性

这个属性定义了Android命名空间,是个定值,不需要要手动修改。

package属性

这是一个完整的Java语言风格包名。包名由英文字母(大小写均可)、数字和下划线组成。每个独立的名字必须以字母开头。包名也代表着唯一的application ID,用来发布应用。不过,在APK构建过程的最后一步,package名会被build.gradle文件中的applicationId属性取代。

构建APK的时候,构建系统使用这个属性来做两件事:

  1. 生成R.java类时用这个名字作为命名空间(用于访问APP的资源)

    比如:package被设置成org.tensorflow.lite.examples.detection,那么生成的R类就是:org.tensorflow.lite.examples.detection.R。

  2. 用来生成在manifest文件中定义的类的完整类名。比如package被设置成org.tensorflow.lite.examples.detection,并且activity元素被声明成,完整的类名就是org.tensorflow.lite.examples.detection.DetectorActivity。

android:versionCode属性

内部的版本号。用来表明哪个版本更新。这个数字不会显示给用户。显示给用户的是versionName。这个数字必须是整数。不能用16进制,也就是说不接受"0x1"这种参数。这个功能也可以放在build.gradle文件中指定。

android:versionName属性

显示给用户看的版本号。

uses-feature元素

Google Play利用这个元素的值从不符合应用需要的设备上将应用过滤。

这东西的作用是将APP所依赖的硬件或者软件条件告诉别人。它说明了APP的哪些功能可以随设备的变化而变化。

使用的时候要注意,必须在单独的元素中指定每个功能,如果要多个功能,需要多个元素。比如要求设备同时具有相机和相机自动对焦功能:

xmlns:android属性

该属性以字符串形式指定了APP要用的硬件或软件功能。

android:required属性

这项属性如果值为true表示需要这项功能否则应用无法工作,如果为false表示应用在必要时会使用该功能,但是如果没有此功能应用也能工作。

android:glEsVersion属性

指明应用需要的Opengl ES版本。高16位表示主版本号,低16位表示次版本号。例如,如果是要3.2的版本,就是0x00030002。如果定义多个glEsVersion,应用会自动启用最高的设置。

application元素

此元素描述了应用的配置。这是一个必备的元素,它包含了很多子元素来描述应用的组件,它的属性影响到所有的子组件。许多属性(例如icon、label、permission、process、taskAffinity和allowTaskReparenting)都可以设置成默认值。

android:allowBackup属性

表示是否允许APP加入到备份还原的结构中。如果设置成false,那么应用就不会备份还原。默认值为true

android:fullBackupContent属性

这个属性指向了一个xml文件,该文件中包含了在进行自动备份时的完全备份规则。这些规则定义了哪些文件需要备份。此属性是一个可选属性。默认情况下,自动备份包含了大部分app文件。

android:supportsRtl属性

声明你的APP是否支持RTL(Right To Left)布局。如果设置成true,并且targetSdkVersion被设置成17或更高。很多RTL API会被集火,这样你的应用就可以显示RTL布局了。如果设置成false或者targetSdkVersion被设置成16或更低。那些RTL API就不起作用了。该属性的默认的值是false。

android:icon

APP的图标,以及每个组件的默认图标。可以在组价中自定义图标。这个属性必须设置成一个引用,指向一个可绘制的资源,这个资源必须包含图片。系统不设置默认图标。

detection

customview

AutoFitTextureView

OverlayView

RecognitionScoreView

ResultsView

env

BorderedText

ImageUtils

Logger

Size

tflite

Classifier

TFLiteObjectDetectionAPIModel

tflite

Classifier

TFLiteObjectDetectionAPIModel

Tracking

MultiBoxTracker

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道