Android Studio打包apk过程中SO文件大小被修改问题

最近想买添加了直播功能,导致apk包突增10M左右,某天打包测试突然发现与同事打包apk大小不一致,我的apk包比同事的包小了4M多,只能是这么神奇的事情了……

通过比对apk文件,发现是so文件大小不一致导致的问题,那么就是在apk打包的过程中so文件被修改了。
网络搜索解决方案找到一篇文章Android Studio打包APK后动态库so文件被改动,需要手动配置so文件的路径,ok,问题解决了。
但是今天打包突然发现apk包变的又小了4M,懵逼o((⊙﹏⊙))o,比对apk文件,直播的so没有被打包进去,打开build下的编译缓存文件发现so的缓存路径发生了改变,直接结果就是需要修改解决方案。
启动Chrome,开启英文搜索模式,再次找到解决方案The .so file abnormal modified after build in Android Studio
修改build.gradle文件,添加如下配置:

android {
    .
    .
    packagingOptions {
        doNotStrip "**/*.so"
    }
}

Gradle sync - > Clean Project - > Rebuild Project,顺利编译完成后再次打包,发现跟同事的apk文件大小一致了。

### Android Studio 打包 APK 时部分页面无法呈现的问题解决方案 在使用 Android Studio 打包 APK过程中,如果出现部分页面无法呈现的问题,通常可能是由以下几个原因导致的:资源文件未正确打包、混淆规则设置不当、依赖库版本冲突或构建工具配置错误等。以下是针对该问题的具体分析和解决方案: #### 1. 检查资源文件是否被正确打包 部分页面无法呈现可能是因为相关资源文件(如布局文件、图片、字符串等)未被正确包含到最终的 APK 中。可以通过以下方式检查并修复: - 确保所有资源文件存放在正确的目录下,例如 `res/layout`、`res/drawable` 等。 - 如果使用了动态加载资源的方式,需确保这些资源路径正确且未被混淆或移除[^1]。 #### 2. 修改 ProGuard 或 R8 混淆规则 如果启用了代码混淆功能(ProGuard 或 R8),可能会导致某些类或方法被误删,从而引发页面无法正常加载。解决方法包括: - 在 `proguard-rules.pro` 文件中添加保留规则,确保关键类和方法不会被混淆或删除。例如: ```pro -keep class com.example.yourpackage.** { *; } -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -keep public class * extends androidx.fragment.app.Fragment ``` - 如果使用了第三方库,还需根据库的文档添加对应的混淆规则[^4]。 #### 3. 检查 Gradle 构建工具配置 Gradle 配置错误可能导致资源文件或依赖库未被正确打包。以下是一些常见的配置问题及解决方法: - 确保 `build.gradle` 文件中正确指定了 `minifyEnabled` 和 `shrinkResources` 参数。例如: ```gradle android { buildTypes { release { minifyEnabled false // 或 true,取决于是否需要混淆 shrinkResources false // 或 true,取决于是否需要压缩资源 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } ``` - 如果遇到 Gradle 下载过慢或失败的情况,可以配置国内镜像站点以加速下载[^1]。 #### 4. 解决依赖库版本冲突 依赖库版本冲突可能导致某些页面的功能异常或无法加载。可以通过以下方式排查和解决问题: - 使用 `./gradlew app:dependencies` 命令查看依赖树,检查是否存在版本冲突。 - 如果发现冲突,可以通过强制指定版本号的方式解决。例如: ```gradle configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'com.android.support') { details.useVersion "28.0.0" // 强制指定支持库版本 } } } ``` #### 5. 检查 JNI 库是否正确打包 如果应用中使用了 JNI 库(`.so` 文件),但打包后缺少相关库,也可能导致页面无法正常加载。解决方法包括: - 确保 `.so` 文件存放在 `src/main/jniLibs` 目录下,并正确配置 Gradle 文件以包含这些库。例如: ```gradle sourceSets { main { jniLibs.srcDirs = ['libs'] // 指定 .so 文件所在目录 } } ``` - 如果更新 Gradle 或 Android Studio 后出现 `.so` 文件缺失问题,可参考相关解决方案[^3]。 #### 6. 调整 Lint 检查规则 有时 Lint 工具会报告一些错误,导致构建失败或页面缺失。可以通过以下方式调整 Lint 规则: ```gradle android { lintOptions { checkReleaseBuilds false abortOnError false } } ``` 上述配置可以忽略 Lint 报告的错误,确保构建过程继续进行[^4]。 --- ### 注意事项 - 如果问题仍未解决,建议通过日志文件(如 `logcat` 输出)进一步定位具体原因。 - 确保 Android Studio 和 Gradle 版本兼容,避免因版本不匹配引发的问题[^1]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值