2016年6月8日 星期三

重新打包(repackage) tika jar

我的app用到tika的一個小功能, 但是把整個tika的jar大約佔了40MB
, 原來我的app只有3MB, 但把tika加入以後, 即使使用 proguard 減少體
積, 但居然還是變成了10MB, 而且整個編譯執行又慢又卡.

最後實在是受不了了, 於是想把tika重新打包, 只抽出我所需要的
class就好.

程序如下:

1. 先做出兩個目錄
d:\sourcejar : 存放所有tika.jar的解壓class
d:\objectjar : 將需要的class複製到此

2.將 objectjar 內的 class 打包

3.用 jarjar 把 tika 內, 用到 javax.xml.stream 的部分改名
(為了打包後, 包含poi , 而poi 用到javax.xml.stream  android 不支援)

4. 將第3步驟的 jar 檔, 複製到 android studio 的 project 中的 libs 目錄內

以上第二及第三步驟沒什麼問題, 但第一步驟如何判斷那些 class 是需要
的呢? 我不知道有沒有更好的方法, 但我是使用較笨的方法, 一次一次的
執行, 然後查看錯誤訊息, 看缺那些 class , 就把那些 class 放進來.

其實我一開始的時候, 是編譯 release 版本, 使用 proguard 來看缺少那些
class, 但 proguard 所顯示的 class 實在太多了, 如果照著加進來, 可能也會
佔太多空間.

本來有成功打包成精簡版的 tika , 後來又加入 poi 後, 因為牽扯的 class 太
複雜了, 所以最後還是放棄加入 poi 的想法.


打包用的 dos batch file bat 如下

echo -------------------------------
rem dos batch file %1 path name %2 file name

rem 目的目錄如果己存在的 class 則結束
if exist "d:\objectjar\%1\%2.class" goto A


md "d:\objectjar\%1"

d:
cd \objectjar
del *.jar

copy "d:\sourcejar\%1\%2.class" "d:\objectjar\%1"

rem 打包
"C:\Program Files\Java\jdk1.8.0_91\bin\jar" -cf d:\objectjar\neat-tika-1.12.jar *

rem ** according to rules.txt to mend content of class, then output to libs

rem 依 rules.txt 的內容修正class名稱
java -jar d:\jar\jarjar-1.3.jar process d:\jar\rules.txt D:\objectjar\neat-tika-1.12.jar  D:\Android\StudioProjects\MyApplication\app\libs\neat-tika-1.12.jar

goto done
:A
echo File %2 Exists!
:done



rule.txt內容如下:

rule javax.xml.stream.** aavax.xml.stream.@1

下載:精簡 tika 1.12

未完成poi移植專案

  © Blogger templates Psi by Ourblogtemplates.com 2008

Back to TOP