Android PDFium 编译

一、PDFium 简介

Pdfium是一个由Google开发的开源PDF渲染库,可以用来显示、处理PDF文档。它是Google Chrome浏览器中用于处理PDF文档的核心引擎。该库不只限于Chrome浏览器使用,其他开发者也可在自己的项目中使用Pdfium库。Pdfium提供了丰富的特性,如文本提取、搜索、注解、表单填充等,且性能高、稳定性好、兼容性强,被许多第三方项目所使用。

二、编译环境

1. Docker unbuntu 22.04
2. Dockerfile
Dockerfile 复制代码
FROM ubuntu:22.04

RUN apt-get update
RUN apt-get install -y  build-essential git subversion pkg-config python3 libtool cmake glib2.0-dev libatspi2.0-dev wget nano

RUN mkdir /pdfium_build
WORKDIR /pdfium_build
RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
ENV PATH=/pdfium_build/depot_tools:${PATH}
RUN gclient config --unmanaged https://pdfium.googlesource.com/pdfium.git@9eec95782c4ecdae50cd8c8e9f88d3f8941db1cd
RUN echo "target_os = [ 'android' ]" >> .gclient
RUN gclient sync
# 可根据需要指定不同版本
RUN mv pdfium.git\@9eec95782c4ecdae50cd8c8e9f88d3f8941db1cd/ pdfium

# working dir
WORKDIR /app
3. build.sh
bash 复制代码
#!/bin/bash

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

set -e

build() {
  local ARCH="$1"
  shift
  local OUT="$DIR/../libpdfsdk/jniLibs/$ARCH/libpdfsdk.so"
  local OUT_UNSTRIPPED="$DIR/../libpdfsdk/jniLibs/$ARCH/libpdfsdk_unstripped.so"
  [ -e "$OUT" ] && return
  echo "building $OUT"
  gn gen out --args="target_os=\"android\" pdf_bundle_freetype=true pdf_is_standalone=false is_component_build=false pdf_enable_xfa=false pdf_enable_v8=false is_debug=false is_official_build=true $*"
  ninja -C out pdfsdk
  mkdir -p $(dirname "$OUT") && cp out/libpdfsdk.so "$OUT" && cp out/lib.unstripped/libpdfsdk.so "$OUT_UNSTRIPPED"
}

build armeabi-v7a target_cpu=\"arm\" arm_version=7
build arm64-v8a target_cpu=\"arm64\"
build x86 target_cpu=\"x86\"
build x86_64 target_cpu=\"x64\"

mkdir -p "$DIR"/../libpdfsdk/jniLibs/include/ && cp "$DIR"/public/*.h "$DIR"/../libpdfsdk/jniLibs/include/

三、编译步骤

1. mkdir pdf & cd pdf
2. 将 build.sh 放入 pdf 目录
3. 将 Dockerfile 放入 pdf/docker 目录下
4. 创建docker image
bash 复制代码
docker build -t pdfium-android -f ./docker
5. 运行docker并进入bash
bash 复制代码
docker run -v ${PWD}:/app -it pdfium-android /bin/bash
6. 在docker的bash中进入目录
复制代码
cd /pdfium_build/pdfium/
7. 编辑BUILD.gn

python 复制代码
config("pdfium_common_config") {
  cflags = []
  cflags_cc = []
  ldflags = []
  include_dirs = [ "." ]
  defines = [
  ]

改为

python 复制代码
config("pdfium_common_config") {
  cflags = [ "-fvisibility=default" ]
  cflags_cc = []
  ldflags = []
  include_dirs = [ "." ]
  defines = [
     "PNG_PREFIX",
     "PNG_USE_READ_MACROS",
     "FPDFSDK_EXPORTS"
  ]

找到 component("pdfium") 节,在这节之后添加

python 复制代码
shared_library("pdfsdk") {
  deps = [":pdfium"]
  if (target_os == "android") {
    configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
  }
}
8. 修改 build_overrides/build.gni

将以下三行注释掉

python 复制代码
if (current_cpu == "arm") {
  arm_use_neon = true
}

变为

python 复制代码
#if (current_cpu == "arm") {
#  arm_use_neon = true
#}
9. 将build.sh拷贝至此
bash 复制代码
copy /app/build.sh .
10. 运行build.sh
11. 完成后结果会输出在
bash 复制代码
/pdfium_build/libpdfsdk
12. 将结果copy到app目录。这样就可以在宿主机使用了。
bash 复制代码
cp -r /pdfium_build/libpdfsdk /app

See Also

https://github.com/benjinus/android-support-pdfium
https://github.com/benjinus/android-support-pdfium

相关推荐
诸葛大钢铁6 分钟前
PDF转PPT转换方法总结
pdf·powerpoint
casual_clover35 分钟前
Android Studio 解决首次安装时下载 Gradle 慢问题
android·ide·android studio
Dovis(誓平步青云)1 小时前
探索C++标准模板库(STL):String接口的底层实现(下篇)
开发语言·c++·stl·string
天天爱吃肉82181 小时前
新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
android·python·嵌入式硬件·汽车
KyollBM2 小时前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
快乐觉主吖2 小时前
Unity的日志管理类
android·unity·游戏引擎
明月看潮生2 小时前
青少年编程与数学 01-011 系统软件简介 06 Android操作系统
android·青少年编程·操作系统·系统软件·编程与数学
feiyangqingyun2 小时前
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
c++·qt·udp·gb28181
snetlogon202 小时前
JDK17 Http Request 异步处理 源码刨析
android·网络协议·http
CV点灯大师2 小时前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法