【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )
文章目錄
- 一、Android Studio 導入可執行 7zr 程序
- 二、從 Assets 資源文件拷貝 7zr 到內置存儲空間
- 三、參考資料
一、Android Studio 導入可執行 7zr 程序
上一篇博客 【Android 安裝包優化】p7zip 源碼交叉編譯 Android 平臺可執行程序 ( 下載 p7zip 源碼 | 交叉編譯 Android 中使用 7z 可執行程序 ) 編譯了可以在 Android 平臺執行的 7zr 可執行程序 ;
這是編譯出的 444 種 CPU 架構的 7zr 可執行程序,
將編譯出的整個 libs 目錄 , 拷貝到 Android 應用的 assets 目錄下 ,
該項目 GitHub 地址 : https://github.com/han1202012/7-Zip
二、從 Assets 資源文件拷貝 7zr 到內置存儲空間
將 Assets 目錄下的可執行 7zr 文件 " libs/arm64-v8a/7zr " ,
拷貝到 " /data/user/0/kim.hsl.a7_zip/files/ " 目錄下 ;
根據不同的 CPU 架構拷貝不同目錄下的可執行文件 ;
// 不同 CPU 架構拷貝不同的可執行程序if (Build.CPU_ABI.startsWith("armeabi-v7a")){inputStream= assets.open("libs/armeabi-v7a/7zr")}else if (Build.CPU_ABI.startsWith("arm64-v8a")){inputStream= assets.open("libs/arm64-v8a/7zr")}else if (Build.CPU_ABI.startsWith("x86")){inputStream= assets.open("libs/x86/7zr")}else if (Build.CPU_ABI.startsWith("x86_64")){inputStream= assets.open("libs/x86_64/7zr")}完整代碼示例 :
package kim.hsl.a7_zipimport android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import java.io.File import java.io.FileOutputStream import java.io.InputStreamclass MainActivity : AppCompatActivity() {companion object{val TAG = "MainActivity"}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)copy7zr()}/*** 將 7zr 文件拷貝到應用私有目錄*/fun copy7zr() {Log.i(TAG, "開始拷貝 7zr 文件")// /data/user/0/kim.hsl.a7_zip/files/7zrvar exeFile = File(filesDir, "7zr")Log.i(TAG, "filesDir = ${filesDir.absolutePath} , exeFile = ${exeFile.absolutePath}")// 查看該文件是否存在, 如果存在設置該文件可執行// 如果不存在 , 拷貝文件if (exeFile.exists()) {exeFile.setExecutable(true)return}else{Log.i(TAG, "")}// 如果不存在 , 拷貝文件var inputStream: InputStream = assets.open("libs/arm64-v8a/7zr")// /data/user/0/kim.hsl.a7_zip/files/7zrvar fileOutputStream: FileOutputStream = FileOutputStream(exeFile)Log.i(TAG, "Build.CPU_ABI = ${Build.CPU_ABI}")// 不同 CPU 架構拷貝不同的可執行程序if (Build.CPU_ABI.startsWith("armeabi-v7a")){inputStream= assets.open("libs/armeabi-v7a/7zr")}else if (Build.CPU_ABI.startsWith("arm64-v8a")){inputStream= assets.open("libs/arm64-v8a/7zr")}else if (Build.CPU_ABI.startsWith("x86")){inputStream= assets.open("libs/x86/7zr")}else if (Build.CPU_ABI.startsWith("x86_64")){inputStream= assets.open("libs/x86_64/7zr")}// 拷貝文件var buffer: ByteArray = ByteArray(1024)var readCount = inputStream.read(buffer);while (readCount != -1){fileOutputStream.write(buffer)readCount = inputStream.read(buffer);}fileOutputStream.flush()fileOutputStream.close()Log.i(TAG, "拷貝 7zr 文件結束")} }日志打印結果 :
2021-04-29 20:20:43.790 22172-22172/kim.hsl.a7_zip I/MainActivity: 開始拷貝 7zr 文件 2021-04-29 20:20:43.791 22172-22172/kim.hsl.a7_zip I/MainActivity: filesDir = /data/user/0/kim.hsl.a7_zip/files , exeFile = /data/user/0/kim.hsl.a7_zip/files/7zr 2021-04-29 20:20:43.791 22172-22172/kim.hsl.a7_zip I/MainActivity: 內置存儲空間不存在 7zr 可執行文件 , 開始拷貝文件 2021-04-29 20:20:43.792 22172-22172/kim.hsl.a7_zip I/MainActivity: Build.CPU_ABI = arm64-v8a 2021-04-29 20:20:43.819 22172-22172/kim.hsl.a7_zip I/MainActivity: 拷貝 7zr 文件結束拷貝結果 : 在命令行查看 /data/user/0/kim.hsl.a7_zip/files/7zr 文件 ;
三、參考資料
參考資料 :
- 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
-
GitHub 項目源碼 : https://github.com/han1202012/7-Zip
-
博客源碼快照 : https://download.csdn.net/download/han1202012/18254613
-
博客源碼快照 : https://download.csdn.net/download/han1202012/18254613
總結
以上是生活随笔為你收集整理的【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 安装包优化】p7zip
- 下一篇: 【Android 安装包优化】Andro