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(未知來源)
任何幫助,將不勝感激!