2
我想使用apk作为一个osgi包,然后将其加载到主机应用程序中。如何在android gradle插件环境中支持osgi?
现在,它工作正常。但我必须手动做这些事情之前推OSgi捆绑电话:
- 打开osgi包与WinRAR的apk文件。
- 将构建的类(在extension-a \ build \ intermediates \ classes \ debug \ com中)拖到包文件的根目录中。
- 将修改后的MANIFEST.MF(包括OSGI配置信息)拖到包文件的META-INFO/MANIFEST.MF中。
- 最后签名包apk。
我想知道如何编写一些gradle脚本来自动执行这些操作?
我使用gradle 2.2.1和'com.android.tools.build:gradle:1.2.3'。
ps: 我知道有一个gradle插件“osgi”可以为osgi bunlde生成MANIFEST.MF,但它只能用于“java”gradle插件。 我无法将它与“android”gradle插件一起使用。
我试着这样说:
android.applicationVariants.all { variant ->
variant.outputs[0].packageApplication.doLast {
String zipFileName = variant.outputs[0].outputFile.name
String inputFile = 'MANIFEST.MF'
def zipIn = variant.outputs[0].outputFile
def zip = new ZipFile(zipIn.getAbsolutePath())
def zipTemp = new File(zipFileName + "_temp")
zipTemp.deleteOnExit()
def zos = new ZipOutputStream(new FileOutputStream(zipTemp))
def toModify = 'META-INFO/MANIFEST.MF'
for(e in zip.entries()) {
if(!e.name.equalsIgnoreCase(toModify)) {
zos.putNextEntry(e)
zos << zip.getInputStream(e).bytes
} else {
zos.putNextEntry(new ZipEntry(toModify))
zos << new File(inputFile).bytes
}
zos.closeEntry()
}
zos.close()
zipIn.delete()
zipTemp.renameTo(zipIn)
}
}
但没有成功:
- 如果使用 “gradle这个干净的构建”,它报告 “出file.apk” 找不到。
如果出file.apk存在,其报告的异常:
java.util.zip.ZipException:无效输入压缩后的大小(预期400,但得到401个字节)在java.util.zip.ZipOutputStream中 .closeEntry(未知来源)
任何帮助,将不胜感激!