问题背景:我们的游戏工程要移植到某渠道,该渠道有自己的计费和登录方式,提供给我们了一个android sdk工程,该工程中只有res,src是一个jar包。
思路由来:使用eclipse工程打包,解压apk,查看里面的class.dex,resource.arsc文件,看看都有什么内容,再自己写脚本实现相同的处理。
普通的android工程ant打包网上的资源已经很泛滥了,我在这里不再赘述。拣重点来说,
1. 合并第三方library和自己工程的res文件,一般的渠道商的library中的文件都会以自己渠道名作为开头,这是非常好的习惯,因为我们不能使两个工程中含有相同的文件,而对于strings、style这些相同文件名的合并,需要把里面对应的内容进行合并。这个合并后的res文件才是我们最终要用的
2. 使用aapt工具生成两个R文件。一个R文件在自己工程的package路径下,另一个R文件是第三方工程的package路径下。方法:使用两次aapt工具,两次package的路径分别从两个工程的AndroidManifest.xml中获得。
3. 使用aapt工具生成resource资源的时候,一定记得-s 的是合并之后的res,否则程序运行过程中会报找不到对应的文件的错误
这样第三方工程的资源就被打到apk文件中了。对于代码资源jar的添加,包括两处处理。
1. 在编译时,添加第三方jar包,否则编译不过去
2. 在生成dex时,使用工具dx时,把jar的路径添加进去,这样jar就被打进了dex中。至此就完成了第三方jar包的添加。
到这里就完成了。具体代码贴出来:(只有一个文件的代码,主要实现都在这个文件中。)
说明:
${sdk.dir} :android sdk 的路径,自己指定自己的位置
${lib-dir} :自己工程下面放第三方jar的libs路径
${outdir-gen} :工程src路径
${resource-all-res-dir} :合并后的res路径
${library-dir} :第三方工程路径
${projecthomedir} :自己工程的路径
1.前面的处理:
<?xml version="1.0" encoding="GB18030"?>
<project name="AntTask" basedir="." default="signAPK">
<path id="android.antlibs">
<pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
<pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
<pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
</path>