【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )
文章目錄
- 一、下載 p7zip 源碼
- 二、交叉編譯 Android 中使用 7z 可執行程序
- 三、參考資料
一、下載 p7zip 源碼
下載 7zip 源碼 , 下載頁面 https://sourceforge.net/projects/p7zip/files/ , 點擊頁面中的 綠色下載按鈕 ;
也可以點擊下面的鏈接直接下載
-
https://jaist.dl.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_src_all.tar.bz2
-
https://nchc.dl.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_src_all.tar.bz2
下載的版本是 p7zip 版本 , 該版本可以在 Linux 中運行 , 交叉編譯后在 Android 中運行 ;
下載后的 p7zip_16.02_src_all.tar.bz2 文件 , 解壓該文件 ;
進入源碼目錄后發現 , p7zip 是使用 C/C++ 編寫 ;
二、交叉編譯 Android 中使用 7z 可執行程序
在 Android 中使用命令行進行壓縮與解壓縮操作 ;
可以使用命令行的場景 :
壓縮解壓縮過程可以使用命令行 , 全程不需要執行過程中的數據 , 只要得到結果 , 這種情況下就可以使用 7z 命令實現該效果 ;
如果要邊壓縮 , 邊分析解壓出來的文件 , 如病毒掃描 , 那就必須實時監控解壓的數據 , 需要移植 7z 源碼 , 并進行二次開發實現 ;
使用兩種方式得到的壓縮解壓縮結果相同 , 如果使用代碼 , 可以在壓縮解壓縮過程中進行更多干預操作 ;
Android 中調用命令行方法 :
Runtime.getRuntime().exec("ls -la");首先要交叉編譯出 Android 平臺上的可執行文件 , 必須是 ARM 架構的可執行程序 ;
p7zip 源碼中給出 Android 平臺使用的源碼 , 在 p7zip_16.02\CPP\ANDROID 目錄下 ;
其中 ,
7z 可以使用插件 , 支持的壓縮格式多 , 可以支持 tar , zip 等壓縮格式 ;
7zr 只支持 7z 格式的壓縮解壓縮 ;
這里推薦使用 7zr , 只使用壓縮比率最高的格式 7z 格式即可 , 多余的功能基本不需要 ;
進入 7zr 目錄下 , 有一個 jni 目錄 和 makefile 文件 ,
jni 目錄中是 Android.mk 和 Application.mk 兩個構建腳本 , 可以使用 ndk-build 進行編譯 ;
打開該 makefile 文件 , 該文件最后幾行代碼給出了相關操作方法 ;
# FIXME debug:cd jni ; ndk-build NDK_DEBUG=1adb push ./libs/armeabi/7zr /data/app/adb push ./libs/armeabi/gdbserver /data/app/adb shell chmod 777 /data/app/7zradb shell chmod 777 /data/app/gdbserveradb forward tcp:1234: tcp:1234adb shell /data/app/gdbserver :1234 /data/app/7zr進入 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\jni 目錄 , 執行 ndk-build 命令 , 進行交叉編譯 ;
修改 Application.mk 構建腳本 :
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 APP_PLATFORM := android-8分析 Android.mk 構建腳本 :
include $(BUILD_EXECUTABLE)-
include $(BUILD_EXECUTABLE) 配置表示生成可執行文件 ;
-
include $(BUILD_SHARED_LIBRARY) 配置表示生成 .so 動態庫 ;
-
include $(BUILD_STATIC_LIBRARY) 配置表示生成 .a 靜態庫 ;
使用最低版本的 NDK 進行編譯 , 使用高版本 NDK 編譯各種報錯 ;
使用 16.1.4479499 版本的 NDK 進行編譯 :
>D:\001_Programs\001_Android\002_Sdk\Sdk\ndk\16.1.4479499\ndk-build.cmd編譯要很長時間 , 輸出如下結果后 ,
最終在 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\libs\armeabi-v7a 目錄下 , 生成了可執行的 7zr 程序 ;
總共生成了 444 種 CPU 架構的可執行文件 ;
編譯過程中其它生成文件如下圖 :
編譯時遇到的錯誤 :
- 【錯誤記錄】Android Studio 導入外部 so 動態庫報錯 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包動態庫的 CPU 架構 )
- 【錯誤記錄】p7zip 交叉編譯 Android 版本 NDK 報錯 ( error: case value evaluates to -2 , which cannot be narrowed )
三、參考資料
參考資料 :
- 7-Zip 官網 : https://www.7-zip.org/
Android NDK 編譯構建腳本參考文檔 :
- ndk-build 腳本 : https://developer.android.google.cn/ndk/guides/ndk-build
- Android.mk 構建腳本 : https://developer.android.google.cn/ndk/guides/android_mk
- Application.mk 構建腳本 : https://developer.android.google.cn/ndk/guides/application_mk
博客資源 : 源碼 , 編譯后的可執行文件, 在 7zip\p7zip_16.02\CPP\ANDROID\7zr\libs\ 目錄下 ;
- 下載地址 : https://download.csdn.net/download/han1202012/18215890
總結
以上是生活随笔為你收集整理的【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】p7zip 交叉编译 And
- 下一篇: 【Android 安装包优化】Andro