1. 文件拷贝
UPL提供了两个文件拷贝的节点,分别是:
<prebuildCopies></prebuildCopies>
和
<resourceCopies></resourceCopies>
<prebuildCopies>节点的执行时机是在ndk-build执行之前。而在ndk-build在执行的时候,会删除libs文件下的相关内容。这意味着,我们不能通过<prebuildCopies>节点来拷贝xxx.so库到libs文件下,而应该通过使用<resourceCopies>节点。
<resourceCopies>节点的执行时机是在ndk-build之后,在apk打包之前。
2. 判断CPU目标架构
UE4支持的目标架构包括但不限于:armeabi-v7a, arm64-v8a, x86, x86_64。
UPL使用以下节点来判断当前的目标架构:
<isArch arch="armeabi-v7a">
//如果当前目标架构为armeabi-v7a,就会执行这里面的代码
</isArch >
eg:
<isArch arch="armeabi-v7a">
<log text="current arch="armeabi-v7a">
</isArch >
3. Android相关节点
3.1 引用第三方的android的jar,aar库
参考OnlineSubsystemGoogle_UPL.xml中引用com.google.android.gms:play-services-auth:9.8.0:
<AARImports>
<if condition="bEnabled">
<true>
<insertValue value="com.google.android.gms,play-services-auth,9.8.0" />
<insertNewline/>
</true>
</if>
</AARImports>
首先,UPL是通过的<AARImports> section来引用第三方的jar,aar库。
然后,使用<insertValue value="" />来指定需要引用的第三方jar,aar库,具体的jar,aar库通过value来指定,其形式为:
"BaseName,Filename,Version"
BaseName,Filename,Version之间用逗号(,)分开。
最后,使用<insertNewline/>节点表示我们是新增。如果没有这个节点,<insertValue value="" />指定的jar,aar不会被添加到引用列表中去。
eg: 引用的google的权限库easypermissions
<AARImports>
<insertValue value="pub.devrel,easypermissions,2.0.1" />
<insertNewline/>
</AARImports>
注:<AARImports>节点被正确执行后,会在aar-imports.gradle中添加依赖的jar,aar.
比较麻烦的是,好像UPL没有提供可以删除依赖jar,aar的节点。
另一种方式是通过<buildGradleAdditions>节点,参考OnlineSubsystemFacebook_UPL.xml添加com.facebook.android:facebook-android-sdk:4.19.0的方式:
<buildGradleAdditions>
<insert>
dependencies {
compile('com.facebook.android:facebook-android-sdk:4.19.0')
}
</insert>
</buildGradleAdditions>
3.2 添加混淆规则
UPL添加混淆规则的代码如下:
<proguardAdditions>
<insert>
<!--要添加的混淆规则-->
</insert>
</proguardAdditions>
该节点只有在发布模式下才会被执行。
3.3 GameActivity相关的节点
3.3.1 添加GameActivity导入语句
UPL使用下面的两个节点在GameActivity.java中添加import语句:
<gameActivityImportAdditions> </gameActivityImportAdditions>
<gameActivityPostImportAdditions> </gameActivityPostImportAdditions>
以上两个节点用于在GameActivity.java中添加导入语句。注意,添加的导入语句需要内嵌在<insert>节点中,即:
<gameActivityImportAdditions>
<insert>
<!--import语句-->
</insert>
</gameActivityImportAdditions>
<gameActivityPostImportAdditions>
<insert>
<!--import语句-->
</insert>
</gameActivityPostImportAdditions>
添加GameActivity类定义
UPL使用下节点在GameActivity类中添加定义:
<gameActivityClassAdditions> </gameActivityOnClassAdditions>
该节点需要与<insert>节点配合使用才能插入代码,即:
<gameActivityClassAdditions>
<insert>
<!--代码-->
</insert>
</gameActivityOnClassAdditions>
4. Android Tips
- 修改/添加AndroidManifest.xml文件<application>元素的属性:
<androidManifestUpdates>
<addAttribute tag="application" name="android:name" value="xxx.xxx.xxx.GameAplication"/>
</androidManifestUpdates>
- 在AndroidManifest.xml文件中<application>元素中添加一个子元素。如添加一个<meta-data>元素
<androidManifestUpdates>
<setElement result="ElementName" value="meta-data"/>
<addAttribute tag="$ElementName" name="android:name" value="meta-data-Name"/>
<addAttribute tag="$ElementName" name="android:value" value="meta-data-Value"/>
<addElement tag="application" name="ElementName" />
</androidManifestUpdates>
其执行结果为
<application>
<meta-data android:name="meta-data-Name" android:value="meta-data-Value" />
</application>
网友评论