移动原生插件审核规范-Android

本文档适用于使用Android开发的原生插件

1)、最外层目录规范

原生插件包的最外层目录必须为该原生插件的原生插件名,如moduleDemo,然后使用zip压缩工具将该目录压缩成zip格式文件。如下图: 图片说明

【**】如果原生插件包不符合该规范,将导致该原生插件不被编译。

2)、子目录或文件规范

Android原生插件包内部最多只能包含以下4个目录或文件,大致如图: 图片说明

如果开发者开发的某原生插件,包入了这个4个文件或目录以外的文件或目录,需要更改。

2.1 res_原生插件名 目录审核

●该目录为可选目录。

1)、该目录命名规范必须为“res_”开头,后面跟原生插件名。例如“res_moduleDemo”。 凡是不符合这个规范的,需要更改。

2)、res_moduleDemo目录中内容审核: res_moduleDemo的根路径下最多仅允许包含res子目录和AndroidManifest.xml文件,如图: 图片说明

如果包入了这2个文件或目录以外的文件或目录,需要更改。

2.2 res目录审核

●该目录为可选目录。

该目录包含:anim、drawable 、drawable-xxxx、layout、layout-xxxx、values、values-xxxx、raw、menu等子目录。 这些子目录均为可选。

2.3 命名规范审核

原则上需要对这些目录下的所有文件进行命名规范的审核。 建议的命名规范为:mo_原生插件名_资源类型_资源名.后缀名。 例如:mo_moduleDemo_anim_aa.xml、mo_moduleDemo_abc.png、mo_moduleDemo_values.xml等。 该审核为非强制,如果开发者原生插件资源命名不规范,可引导其按照《原生插件开发指南》中建议的命名规范对资源进行规范的命名。

【**】防止潜在的与他人原生插件资源冲突的问题。

资源冲突,通常在云编译的时候,编译失败的log中将带大量类似“error: Resource entry ebpay_text_red is already defined”的log,很大部分编译失败均由此原因引起。

2.4 引擎固有资源审核

任意drawable、drawable-xxxx目录下不允许包含名为uz_icon.png和uz_splash_bg.png的图片资源。如果有,全部删除。

【**】否则将导致使用该原生插件的app其应用图标和启动页变成默认的。

2.5 字符资源审核

任意values、values-xxxx目录下的strings.xml文件中,不允许包含名为app_name的字段

例如某原生插件的values目录下包含的strings.xml中有类似如下配置:

<resources>
    <string name="app_name">ModuleDemo</string>
</resources>

这是不允许的,需要修改。 【**】否则将导致使用该原生插件的app其应用名称变成该字段定义的。

以下命名是不良好的。 因为太普通。

<resources>
 <string name="action_settings">Settings</string>
    <string name="title_activity_record">RecordActivity</string>
    <string name="tip">提示</string>
    <string name="dismiss">取消</string>
</resources>

如果别人的原生插件中strings.xml 中有相同的名字 “action_settings” , 那么这两个原生插件在一起编译时就会失败。因此开发者在定义字段时一定要带专有的前缀,如: modulename_action_settings

2.6 主题资源审核

任意values、values-xxxx目录下的styles.xml文件中,不允许包含名为AppTheme的字段例如某原生插件的values目录下包含的styles.xml中有类似如下配置:

<resources>
    <style name="AppTheme">
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

这是不允许的,需要修改。

【**】否则将导致引擎的相关主题设置被更改,引发一些不可预料的问题。

2.7 AndroidManifest.xml文件审核

●该文件为可选文件。

AndroidManifest.xml为标准的xml格式文件,用于配置该原生插件所需的权限,用到的系统组件等。 一个全面的AndroidManifest.xml文件参考如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest>

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

    <activity android:name="com.yonbuilder.moduleDemo.DemoActivity"/>

    <receiver android:name="com.yonbuilder.moduleDemo.DemoReceiver" />

    <service android:name="com.yonbuilder.moduleDemo.DemoService" />

    <provider android:name="com.yonbuilder.moduleDemo.DemoProvider" />

    <meta-data android:name="moduleDemo" />

</manifest>

结合上表中的代码,AndroidManifest.xml应该满足以下规范:

2.7.1 根节点审核

根节点必须为 <manifest>

2.7.2 子节点审核

节点下只能包含:

<uses-permission> <activity> <receiver> <service> <provider> <meta-data>

6个类型的子节点。如果包含其他节点,需要修改(比如很多开发者的原生插件直接将引擎的AndroidManifest.xml文件打包到原生插件包中,导致存在<application>、<supports-screens>等节点,这是错误的)。

该6个类型的节点,允许有子节点。

2.7.3 不允许的节点

1)、类型的节点中,不允许包含名为: <activity android:name="com.uzmap.pkg.EntranceActivity"/> 的节点。 该配置为引擎配置,不允许原生插件引用。如果包含,需要修改。

2)、类型的节点中,不允许包含名为: <receiver android:name="com.uzmap.pkg.uzapp.UPExtraBridge" /> 的节点。 该配置为引擎配置,不允许原生插件引用。如果包含,需要修改。

3)、类型的节点中,不允许包含名为: <service android:name="com.uzmap.pkg.uzsocket.UPnsService" />的节点。 该配置为引擎配置,不允许原生插件引用。如果包含,需要修改。

4)、类型的节点中,不允许包含名为: <provider android:name="com.uzmap.pkg.uzapp.UProvider" />的节点。 该配置为引擎配置,不允许原生插件引用。如果包含,需要修改。

5)、类型的节点中,不允许包含名为: <meta-data android:name="uz_version" />的节点。 该配置为引擎配置,不允许原生插件引用。如果包含,需要修改。

2.8 source 目录审核

source目录为必须目录。如果原生插件包中没有该目录,需要修改。

1)、该目录为原生插件的代码导出的JAR文件及其依赖的JAR所在目录,可存放多个JAR文件。

2)、该目录下均存放的.jar后缀名的文件,如moduleDemo.jar、baidu.jar、tencent.jar。

3)、该目录不允许包含子目录。如果包含子目录,需要修改。

4)、该目录下不允许存放名为android-support-v4.jar的文件。如果存在,需要修改。

【**】开发者的android-support-v4.jar可能版本很低,导致使用该原生插件的app运行时发生崩溃。

5)、该目录下不允许存放名类似为apiEngine v1.1.0.jar的文件。即引擎文件。 如果存在,需要修改。

【**】该文件为引擎文件,由服务器动态编译最新版本,原生插件中若包入,将直接导致使用该原生插件的app无法使用。

2.9 target 目录审核

●该目录为可选目录。

1)、该目录为原生插件用到的so库其依赖的so库所在目录,可存放多个so文件。

2)、该目录允许包含子目录,如armeabi-v7a、arm64、x86、mips等,这些子目录均为可选。

如果包含了其中之一的子目录,那么该子目录下存放的so文件必须保持跟target目录下的so文件数量及名称一致。

3)、该目录及其子目录下不允许存放名libsec.so的文件。如果存在,需要删除。

【**】该文件为引擎文件,由服务器动态编译最新版本,原生插件中若包入,将直接导致使用该原生插件的app无法使用。

2.10 module.json文件审核

●该文件为必须文件。

该文件的结构为一个或者多个JSON对象,每个对象代表一个原生插件(平台允许一个原生插件包中同时存放多个原生插件的),如:

一个对象时的module.json配置:

{
    "name": "moduleDemo",
    "class":"com.yonbuilder.moduleDemo"
}

多个对象时的module.json配置,对象与对象之间以逗号隔开:

{
    "name": "moduleDemo",
    "class":"com.yonbuilder.moduleDemo"
},
{
    "name": "moduleDemo1",
    "class":"com.yonbuilder.moduleDemo1"
},
{
    "name": "moduleDemo2",
    "class":"com.yonbuilder.moduleDemo2"
}

同时需要检查一下module.json配置中,所有的字符是否均是半角的字符。

凡是不符合以上格式的,均须开发者做更改。

是否仍需要帮助? 请保持联络!
最后更新于 2023/01/18