原生插件包的最外层目录必须为该原生插件的原生插件名,如moduleDemo,然后使用zip压缩工具将该目录压缩成zip格式文件。如下图:
【**】如果原生插件包不符合该规范,将导致该原生插件不被编译。
Android原生插件包内部最多只能包含以下4个目录或文件,大致如图:
如果开发者开发的某原生插件,包入了这个4个文件或目录以外的文件或目录,需要更改。
●该目录为可选目录。
1)、该目录命名规范必须为“res_”开头,后面跟原生插件名。例如“res_moduleDemo”。 凡是不符合这个规范的,需要更改。
2)、res_moduleDemo目录中内容审核: res_moduleDemo的根路径下最多仅允许包含res子目录和AndroidManifest.xml文件,如图:
如果包入了这2个文件或目录以外的文件或目录,需要更改。
●该目录为可选目录。
该目录包含:anim、drawable 、drawable-xxxx、layout、layout-xxxx、values、values-xxxx、raw、menu等子目录。 这些子目录均为可选。
原则上需要对这些目录下的所有文件进行命名规范的审核。 建议的命名规范为: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,很大部分编译失败均由此原因引起。
任意drawable、drawable-xxxx目录下不允许包含名为uz_icon.png和uz_splash_bg.png的图片资源。如果有,全部删除。
【**】否则将导致使用该原生插件的app其应用图标和启动页变成默认的。
任意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
任意values、values-xxxx目录下的styles.xml文件中,不允许包含名为AppTheme的字段。例如某原生插件的values目录下包含的styles.xml中有类似如下配置:
<resources>
<style name="AppTheme">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
这是不允许的,需要修改。
【**】否则将导致引擎的相关主题设置被更改,引发一些不可预料的问题。
●该文件为可选文件。
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应该满足以下规范:
根节点必须为 <manifest>
。
<uses-permission>
<activity>
<receiver>
<service>
<provider>
<meta-data>
6个类型的子节点。如果包含其他节点,需要修改(比如很多开发者的原生插件直接将引擎的AndroidManifest.xml文件打包到原生插件包中,导致存在<application>、<supports-screens>
等节点,这是错误的)。
该6个类型的节点,允许有子节点。
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" />
的节点。
该配置为引擎配置,不允许原生插件引用。如果包含,需要修改。
●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无法使用。
●该目录为可选目录。
1)、该目录为原生插件用到的so库其依赖的so库所在目录,可存放多个so文件。
2)、该目录允许包含子目录,如armeabi-v7a、arm64、x86、mips等,这些子目录均为可选。
如果包含了其中之一的子目录,那么该子目录下存放的so文件必须保持跟target目录下的so文件数量及名称一致。
3)、该目录及其子目录下不允许存放名libsec.so的文件。如果存在,需要删除。
【**】该文件为引擎文件,由服务器动态编译最新版本,原生插件中若包入,将直接导致使用该原生插件的app无法使用。
●该文件为必须文件。
该文件的结构为一个或者多个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配置中,所有的字符是否均是半角的字符。
凡是不符合以上格式的,均须开发者做更改。