Ant本身提供了非常便捷灵活的扩展方式,所以有很多第三方的扩展包。xmltask就是一个非常方便的操作xml文件的扩展。 http://sourceforge.net/projects/xmltask/
1、通过taskdef来引入xmltask
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
2、 添加replace-manifest target
<target name="-replace-manifest" > <xmltask source="${basedir}/${manifest.file}" dest="${basedir}/${manifest.file}" encoding="utf-8" > <attr path="//manifest" attr="android:versionName" value="${project.versionname}" /> <attr path="//manifest" attr="android:versionCode" value="${project.versioncode}" /> <attr path="//manifest/application/meta-data[@android:name='usedSDK']" attr="android:value" value="${project.usedSDK}" /> <attr path="//manifest/application/meta-data[@android:name='debugable']" attr="android:value" value="${project.debugable}" /> <attr path="//manifest/application/meta-data[@android:name='usedEntirePack']" attr="android:value" value="${project.usedEntirePack}" /> <attr path="//manifest/application/meta-data[@android:name='lazySetGLView']" attr="android:value" value="${project.lazySetGLView}" /> </xmltask> </target>
xmltask中的attr 标签中的path是通过xpath方式来定位到xml中节点的,关于xpath 可以查看官方文档 http://www.w3.org/TR/xpath/
3、在java代码中获取AndroidManifest.xml文件中的配置
public class AppBase extends Application { @Override public void onCreate() { super.onCreate(); Platform platform = new AZPlatform(); try { ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); Bundle meta = appInfo.metaData; platform.setDebugable(meta.getBoolean(DEBUGABLE_KEY, false)); platform.setUsedSDK(meta.getInt(USED_SDK_KEY, 0)); platform.setUsedEntirePack(meta.getBoolean(USED_ENTIRE_PACK_KEY, true)); platform.setLazySetGLView(meta.getBoolean(LAZY_SET_GLVIEW_KEY, false)); Cocos2dxHelper.PLATFORM_INST = platform; } catch (NameNotFoundException e) { e.printStackTrace(); } } }
Platform 是针对不同渠道做的一个单例模板类,设置完一些平台相关的配置后,注入到Cocos2dxHelper中,便于Cocos2dx的lib包中使用