【发布时间】:2015-10-08 10:19:32
【问题描述】:
我想将 apk 用作 osgi 包,然后将其加载到主机应用程序中。
现在,一切正常。但在将 osgi 包推送到手机之前,我必须手动执行这些操作:
- 用 WinRAR 打开 osgi bundle 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 clean build”,则会报告“out-file.apk”未找到。
-
如果out-file.apk存在,报异常:
java.util.zip.ZipException:无效的条目压缩大小(预期为 400,但得到了 401 个字节) 在 java.util.zip.ZipOutputStream.closeEntry(Unknown Source)
任何帮助将不胜感激!
【问题讨论】:
标签: android groovy gradle osgi