关于QT for Android生成的AndroidManifest.xml学习说明

<?xml version="1.0"?>
<manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
    <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --">
        <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

            <!-- Application arguments -->
            <!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
            <!-- Application arguments -->

            <meta-data android:name="android.app.lib_name" android:value="untitled1"/>
            <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
            <meta-data android:name="android.app.repository" android:value="default"/>
            <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
            <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
            <!-- Deploy Qt libs as part of package -->
            <meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
            <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
            <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
            <!-- Run with local libs -->
            <meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
            <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
            <meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
            <meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
            <meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
            <!--  Messages maps -->
            <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
            <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
            <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
            <!--  Messages maps -->

            <!-- Splash screen -->
            <!-- meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/ -->
            <!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
            <!-- Splash screen -->

            <!-- Background running -->
            <!-- Warning: changing this value to true may cause unexpected crashes if the
                          application still try to draw after
                          "applicationStateChanged(Qt::ApplicationSuspended)"
                          signal is sent! -->
            <meta-data android:name="android.app.background_running" android:value="false"/>
            <!-- Background running -->

            <!-- auto screen scale factor -->
            <meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
            <!-- auto screen scale factor -->

            <!-- extract android style -->
            <!-- available android:values :
                * full - useful QWidget & Quick Controls 1 apps
                * minimal - useful for Quick Controls 2 apps, it is much faster than "full"
                * none - useful for apps that don‘t use any of the above Qt modules
                -->
            <meta-data android:name="android.app.extract_android_style" android:value="full"/>
            <!-- extract android style -->
    </activity>

    <!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->

    </application>

    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/>
    <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>

    <!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
         Remove the comment if you do not require these default permissions. -->
    <!-- %%INSERT_PERMISSIONS -->

    <!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
         Remove the comment if you do not require these default features. -->
    <!-- %%INSERT_FEATURES -->

</manifest>

1、manifest 根节点,必须包括一个application节点

  package属性用于设置应用进程的默认名称;

  xmlns:android属性用于设置android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据;

  android:versionName属性设置APP的版本号,用于提供给用户版本说明

  android:versionCode属性是设置设备升级版本识别号,保存APP更新次数,必须是数值型,例如第一版为1,之后二三版为2、3

  android:installLocation属性设置程序安装位置,有三个值

    internalOnly—APK必须安装到内部存储空间。并且安装之后,不能将程序移动到SD卡上。

    auto—系统会根据存储空间去选择将APK安装在内部存储空间还是SD卡上。安装之后,可以在内部存储空间和SD卡之间移动。

    preferExternal—系统会优先考虑将APK安装到SD卡上,如果SD存储已满,也会安装到内部存储上。

2、application标签

  android:hardwareAccelerated属性设置程序中所有Activity和View对象启用硬件加速渲染,true启动;false不启动。默认为true

  andriod:name属性设置application子类的实现,应用程序启动时,这个类在其他组件模块之前实例化,这个属性设置值采用完整的java类名;可选项,如果没有自己的子类,默认"org.qtproject.qt5.android.bindings.QtApplication"这个基本的Application实例

  android:lable属性是一个标签,默认为%%INSERT_APP_NAME%%

3、activity标签

  android:configChanges属性设置了需要Activity自己处理的配置变化项,这些设置的项如果发生变化,则要进行自我处理。默认情况,运行时配置变化发生时,Activity会关闭并重启,如果设置了这些配置变化项,则不会重启Activity。

  默认值:"orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation"

    orientation—屏幕方向发生变化,要自我处理,例如旋转屏幕

    uiMode—用户界面发生变化时,要自我处理(这里的变化方式不太明白)

    screenLayout—屏幕布局发生变化时,要自我处理,例如采用不同的显示模式时

    smallestScreenSize—设备物理尺寸发生变化时,要自我处理,例如显示在不同显示器上

    layoutDirection—布局方向发生变化时,要自我处理(这里的变化方式不太明白)

    locale—语言环境变化时,要自我处理,例如选择不同的语种类型

    fontScale—字体大小变化时,要自我处理,例如选择不同的字体大小设置

    keyboard—键盘类型变化时,要自我处理,例如插入外接键盘

    keyboardHidden—键盘的可用性发生变化时,要自我处理,例如启用了其他新接入的键盘

    navigation—导航类型变化时,要自我处理

 

  android:name属性设置了这个Activity的名字,默认值"org.qtproject.qt5.android.bindings.QtActivity"v,

  android:lable属性是标签,默认值%%INSERT_APP_NAME%%

  android:screenOrientation属性设置Activity在设备上的显示方向,默认值"unspecified"

    unspecified—默认值,由系统来选择方向

    user—使用用户当前首选的方向

    sensor—显示的方向是由设备的方向传感器来决定的,但是这个设置可能不能满足4个方向的旋转,可使用fullSensor

    fullSensor—显示方向4个方向的旋转

    noSensor—不会按照方向传感器进行选准

    另外还有一些横向、纵向旋转的设置,可以自行查找了解一下。

  

   android:launchMode属性设置如何启动Activity的指令。默认值"singleTop",有四个值供选择

    standard—Activity能够实例化多次,每次需要创建新的Intent对象

    singleTop—Activity能够实例化多次,不一定需要创建新的Intent对象

    singleTask—Activity只能启动一次,允许其他Activity作为它的一部分运行

    singleInstance—Activity只能启动一次,不允许其他Activity作为它的部分运行

 

4、intent-filter标签,用于指定Activity、Service或Broadcast Receiver能够响应的Intent对象的类型,相当于过滤器

5、action标签,给Intent过滤器添加一个操作,一个<intent-filter>里面必须包含一个或者多个action,如果一个都没有,就不会有Intent对象通过过滤器。

  android:name属性设置操作的名称,一般用ACTION_string常量定义标准操作,关联这些操作和这个属性的时候,需要将ACTION_转换成"android.intent.action.",例如ACTION_MAIN->action.intent.action.MAIN;对于自定义的操作,可以使用包名来替换,确保唯一性,例如org.qtproject.example.GETTINGDAT。

6、category标签,给Intent过滤器添加一个分类名称

  android:name属性定义分类的名称,标准的分类一般用CATEGORY_name常量定义,关联这个定义和这个属性的时候,需要将CATEGORY_name转换成"andoid.intent.category.",例如CATEGORY_LAUNCHER->andoid.intent.category.LAUNCHER;自定义分类可使用报名来替代,如action标签。

7、meta-data标签,用name-value对的方式给父组件提供数据,一个组件的元素能够包含任意多个<meta-data>子元素,所有这些meta元素中定义的值会被集合到一个对象中,并且提供给组件。

  android:name属性设置应用的唯一名称,使用java的命名规则可确保命名的唯一性,例如android.app.lib_name

  android:value属性给这个name项分配一个值,可以分配不同的Int、String等类型,不同类型的值获取方式不同,例如getInt()、getString()

  android:resource属性定义了要引用的资源,资源的ID会进行关联(这里的获取还不太清楚)

8、uses-sdk标签,定义APK能够运行的版本

  android:minSdkVersion属性设置能够运行APK的最小sdk版本。如果没有设定的话,默认是1。

  android:targetSdkVersion属性设置了运行APK的目标的API级别。如果没有设定的话,默认等于minSdkVersion。

  另外还有一个android:maxSdkVersion属性,设置能够运行APK的最大sdk版本,一般这个属性不设置,因为可能导致应用不能在升级后的平台使用

9、supports-screens标签,控制应用支持的屏幕尺寸,并且针对当出现比应用程序支持的屏幕还要大的屏幕时,启动屏幕兼容模式

  android:largeScreens属性设置是否支持较大外形的屏幕,默认为true

  android:normalScreens属性设置是否支持普通外形的屏幕,默认为true

  android:anyDensity属性设置是否包含使用任意外形屏幕的资源,默认为true

  android:smallScreens属性设置是否支持较小外形的屏幕,默认为true

10、还有很多其他的标签,不过目前还未遇到,以后遇到在继续进行补充;感觉应该就是java的AndroidManifest.xml文件一样的配置。只是C++的程序员应该不怎么了解java还需要继续学习。
  

关于QT for Android生成的AndroidManifest.xml学习说明

上一篇:C++中vector容器的常用操作方法实例总结


下一篇:Blazor WebAssembly 修仙之途 - 组件与数据绑定