文章目录

  • 一、动态库打包配置
  • 二、NDK 完整配置参考
  • 三、参考资料

一、动态库打包配置


在 build.gradle 构建脚本中 , 配置 ndk 编译的动态库 CPU 架构类型 ;

在 " android / defaultConfig / ndk " 层级下 , 配置 abiFilters 选项 , 为其配置需要打包的 动态库 CPU 架构 ;

如果按照 abiFilters “armeabi-v7a”, “arm64-v8a”, “x86”, “x86_64” 配置 , 则打包时会将四种 CPU 架构的动态库都配置到 APK 中 ;

全指令集架构的动态库打包配置 :

android {defaultConfig {    // II . NDK 配置 2 : 配置 AS 工程中的 C/C++ 源文件的编译//配置 APK 打包 哪些动态库//  示例 : 如在工程中集成了第三方库 ,//        其提供了 "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" 等指令集的动态库//        那么为了控制打包后的应用大小, 可以选择性打包一些库 , 此处就是进行该配置ndk{// 打包生成的 APK 文件指挥包含 ARM 指令集的动态库abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"}}
}

打包时 , 如果当前工程资源中 , 有 444 种全架构的动态库 , 系统会将这四个动态库都打包到 APK 安装包中 ;

注意全架构动态库的 APK 大小是 7.7MB\rm 7.7 MB7.7MB ;

事实上 , 绝大部分应用都不需要配置全架构的动态库 , 市面上的 x86 手机几乎绝迹 , 另外 “arm64-v8a” 架构的 CPU 可以向下兼容 “armeabi-v7a” 架构的动态库 ;

因此 , 这里只提供 “armeabi-v7a” 架构的动态库即可 , 市面上大部分应用也是这么干的 ; ( 即使是微信也只支持 armeabi 这一个架构 )

注意 : 如果要在电脑上的 Android 模拟器上运行动态库 , 需要支持 “x86” 架构 , 大部分 PC 上的 Android 模拟器都是 x86 架构的 ;

只支持 “armeabi-v7a” 指令集架构的动态库打包配置 :

android {defaultConfig {    // II . NDK 配置 2 : 配置 AS 工程中的 C/C++ 源文件的编译//配置 APK 打包 哪些动态库//  示例 : 如在工程中集成了第三方库 ,//        其提供了 "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" 等指令集的动态库//        那么为了控制打包后的应用大小, 可以选择性打包一些库 , 此处就是进行该配置ndk{// 打包生成的 APK 文件指挥包含 ARM 指令集的动态库abiFilters "armeabi-v7a"/*, "arm64-v8a", "x86", "x86_64"*/}}
}

配置完毕后 , 编译新的 APK 文件 ;

打包后的结果如下 , 支持 444 个 CPU 指令集架构的 APK 包有 7.7MB\rm 7.7 MB7.7MB , 只支持 “armeabi-v7a” 指令集架构的 APK 只有 5.9MB\rm 5.9 MB5.9MB , 优化效果比较可观 ;

二、NDK 完整配置参考


plugins {id 'com.android.application'id 'kotlin-android'
}android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {applicationId "kim.hsl.a7_zip"minSdkVersion 18targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"// I . NDK 配置 1 : 配置 AS 工程中的 C/C++ 源文件的编译//     defaultConfig 内部的 externalNativeBuild 配置的是配置 AS 工程的 C/C++ 源文件编译参数//     defaultConfig 外部的 externalNativeBuild 配置的是 CMakeList.txt 或 Android1.mk 构建脚本的路径externalNativeBuild {cmake {cppFlags ""//配置编译 C/C++ 源文件为哪几个 CPU 指令集的函数库 (arm , x86 等)abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"}/*ndkBuild{abiFilters "armeabi-v7a" *//*, "arm64-v8a", "x86", "x86_64"*//*}*/}// II . NDK 配置 2 : 配置 AS 工程中的 C/C++ 源文件的编译//配置 APK 打包 哪些动态库//  示例 : 如在工程中集成了第三方库 ,//        其提供了 "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" 等指令集的动态库//        那么为了控制打包后的应用大小, 可以选择性打包一些库 , 此处就是进行该配置ndk{// 打包生成的 APK 文件指挥包含 ARM 指令集的动态库abiFilters "armeabi-v7a"/*, "arm64-v8a", "x86", "x86_64"*/}}// III . NDK 配置  : 配置 AS 工程中的 C/C++ 源文件的编译构建脚本// 配置 NDK 的编译脚本路径// 编译脚本有两种 ① CMakeList.txt ② Android.mk//     defaultConfig 内部的 externalNativeBuild 配置的是配置 AS 工程的 C/C++ 源文件编译参数//     defaultConfig 外部的 externalNativeBuild 配置的是 CMakeList.txt 或 Android1.mk 构建脚本的路径externalNativeBuild {// 配置 CMake 构建脚本 CMakeLists.txt 脚本路径cmake {path "src/main/cpp/CMakeLists.txt"//path "src/main/staticLibs/CMakeLists.txt"version "3.10.2"}// 配置 Android1.mk 构建脚本路径/*ndkBuild{//path "src/main/ndkBuild_Shared/Android.mk"path "src/main/ndkBuild_Static/Android.mk"}*/}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}
}dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"implementation 'androidx.core:core-ktx:1.3.2'implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

三、参考资料


博客资源 :

  • GitHub 项目源码 : https://github.com/han1202012/7-Zip

  • 下载地址 :

【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )相关推荐

  1. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )

    文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...

  2. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.配置 CMakeLists.txt 构建脚本 1.导入动态库 2.导入头文件 三.完整 CMakeLists ...

  3. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...

  4. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.so 动态库 四.参考资料 一.修改 7zr 交叉编 ...

  5. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

  6. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.完整代码示例 1.Java 层代码 2.JNI 层代码 3.日志头文件 4.执行结果 四.参考资料 前置博客 ...

  7. 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )

    文章目录 一.开启资源压缩 二.启用严格模式的资源引用检查 三.自定义保留/移除资源配置 四.资源压缩效果 五.完整配置 1.keep.xml 配置 2.build.gradle 构建脚本 六.参考资 ...

  8. 【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )

    文章目录 一. Android Studio 中导入 libwebp.so 库 二. Android Studio 中测试 libwebp.so 库 三.参考资料 一. Android Studio ...

  9. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

    文章目录 一.resources.arsc 资源映射表 混淆 二.resources.arsc 资源映射表二进制格式分析 三.参考资料 资源混淆时 , 需要修改混淆 resources.arsc 资源 ...

  10. 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

    文章目录 一.AAPT2 资源编译工具 二.resources.arsc 资源映射表 工作机制 三.参考资料 一.AAPT2 资源编译工具 资源的编译 , 生成 R.java 文件 , 都是通过 AA ...

最新文章

  1. [分类整理IV]微软等100题系列V0.1版:字符串+数组面试题集锦
  2. java slf4j日志框架_SLF4J - 日志框架 - 类库 - Java - 代码树
  3. php漏洞论坛,PHPWind超级漏洞简单用
  4. elementui在vue校验表单失效的原因之一(当表单含有一到多个对象)
  5. 使用BaseAdapter实现复杂的ListView
  6. 什么样的代码是好代码_什么是好代码?
  7. Windows下安装SQLPlus的帮助
  8. selector多路复用_多路复用器Selector
  9. 德勤2021技术趋势:繁琐、点状的匠人AI时代将终结,MLOps时代来临
  10. C++ - 类模板(class template) 详解 及 代码
  11. easyswoole数据库连接池_easyswoole orm配置数据库连接
  12. MySQL slowlog 统计_mysql slow log 简单统计
  13. Xcode学习C++(一项目的建立)
  14. 无障碍,root,adb如何隐藏,去除检测
  15. 迅歌KTV服务器各型号,十大ktv必点歌曲排行榜 ktv点唱率最高的十首歌榜单公布...
  16. Session 'app': Error Launching activity
  17. 条形码 Ean13 的校验方法
  18. 云原生在京东丨揭秘五大云原生项目在京东的落地实践
  19. 新闻资讯类网站的PC端前台模板分享
  20. 2020-2021年度第2学期课程回顾总结

热门文章

  1. 使用ramdisk 优化nagios IO性能
  2. ALSM_EXCEL_TO_INTERNAL_TABLE
  3. 迁移svn项目到git
  4. IDEA 调试Spring-boot 应用
  5. React (native) 相关知识
  6. dyld: Library not loaded: @rpath/XCTest.framework/XCTest
  7. ASP.NET Core 中文文档 第三章 原理(12)托管
  8. bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数
  9. Android SlidingMenu以及ActionBarSherlock的基础使用教程
  10. 怎样把SharePoint中文备份恢复到英文版,修改sharepoint站点语言