MuPdf官網(wǎng)
MuPdfAndroid開發(fā)文檔
本次使用版本 14
這篇文章記錄編譯mupdf-android-viewer庫舶担,打包成so庫璧针,并在項目中使用.請參考
編譯so庫
- 首先還是獲取mupdf-android-viewer庫到本地豌鹤,使庫能夠正常運行魁索,并安裝到手機上,看看效果计雌。
git clone --recursive git://git.ghostscript.com/mupdf-android-viewer.git
- 生成必要文件
在mupdf-android-viewer/jni/libmupdf
目錄下執(zhí)行make generate
命令陪汽。
? libmupdf git:(d63bd227) pwd
/Users/fengxing/openProject/mupdf-android-viewer/jni/libmupdf
? libmupdf git:(d63bd227) make generate
- 添加
local.properties
文件
在工程跟目錄下創(chuàng)建local.properties
文件配置sdk训唱,ndk路徑
ndk.dir=/Users/fengxing/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/fengxing/Library/Android/sdk
-
cmake編譯
在根目錄執(zhí)行make進行編譯,如果編譯成功挚冤,那so文件會生成在這里况增。
image.png
目錄
mupdf-android-viewer/jni/build/intermediates/ndkBuild/debug/obj/local
使用so庫
現(xiàn)在我們已經(jīng)得到了so庫,現(xiàn)在我們就使用它训挡。
- 創(chuàng)建新項目
創(chuàng)建一個新項目澳骤,項目的名字就叫MuPdfSo
-
導(dǎo)入so庫
把編譯的so庫導(dǎo)入新項目中
image.png
在gradle中添加代碼
defaultConfig {
applicationId "cn.picc.com.mupdfso"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
// 設(shè)置支持的SO庫架構(gòu)
abiFilters 'armeabi'
}
}
- 創(chuàng)建兩個module
看mupdf-android-viewer的目錄結(jié)構(gòu)
可以看出來mupdf-android-viewer由三部分組成,
app:顯示pdf
lib:UI顯示層
jni:MuPdf核心庫
調(diào)用順序:
app-->lib庫-->jni庫<--> JNI <--> .h -->.c
我們也根據(jù)這個模式創(chuàng)建兩個module
一個名字叫PdfSo澜薄,定義native方法的为肮。
一個名字叫PdfUi,定義顯示UI的肤京。
PdfSo
首先來搞PdfSo這個module弥锄,PdfSo主要是定義了一些native,和c文件進行溝通,這里我們復(fù)制mupdf-android-viewer定義好的類籽暇。
把com.artifex.mupdf.fitz
這個包,整個全部復(fù)制出來饭庞,記住 是全部哦戒悠。放到PdfSo庫中,類似這樣舟山。
因為c代碼庫中定義的包就這個com.artifex.mupdf.fitz
所以native也必須是這個包绸狐。
我們來看下c代碼和h代碼。
看到?jīng)] 在c代碼中有個pkg累盗,這個就是咱們定義的報名寒矿,可以修改成我們的報名,就不需要使用他們的包明了若债。
.c文件可以修改報名符相,是因為 看圖
是因為根據(jù)包名去找字段,但是.h中的字段是寫死的蠢琳,只改c代碼的包名可能還會有問題啊终。
好吧,那暫時先使用他們的包名傲须。
PdfUi庫
這個就簡單了:把lib庫的代碼直接占過去就行
別忘了資源文件蓝牲。
編譯一下,也就是 包明的問題泰讽,分分鐘解決例衍。
在app主模塊測試一下,可以使用了已卸。佛玄。。咬最。
特此記錄翎嫡。
自定義界面
目前我沒有這方便需求。
簡單顯示就可以的
使用so庫 api大小增加8m左右
如果需要自定義界面或者需要什么功能
源碼都有了 自己搞把永乌。惑申。。翅雏。圈驼。。望几。绩脆。