重新打包(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
下載:精簡 tika 1.12
未完成poi移植專案