按照cpu架构分别打包apk

按照CPU架构分别打包apk

可以按照工程中实际的要求,灵活打包so库

  • 项目要求
  • splits分包
  • ndk{abiFilters:}过滤

项目要求

为了满足公司自动化测试的要求,需要打支持x86架构的apk,因为自动化测试都是在电脑上跑的,电脑都是x86的架构,所以genymotion等模拟器都是x86架构的。有使genymotion支持arm架构的插件,但是导入这个插件后,我们的应用还是跑不起来。所以只好加x86的支持,因为百度的so库比较多,导致apk过大,而现在的手机基本都是arm的,所以为了大小,线上包不能打x86的so库。所以需要打两个包,一个用于自动化测试支持x86的包,一个用于线上不支持x86的包。

按照cpu架构分别打包apk_第1张图片

split分包

首先是splits命令,这个命令可以按照各种规则去分包,比如按照abi,屏幕密度(即ldpi,hdpi等)分包。
语法如下:

splits {
        abi {
            enable true
            reset()
            include 'x86'
            exclude 'armeabi', 'armeabi-v7a', "arm64-v8a"
            universalApk true
        }
    }

include就是包括,exclude就是不包括。包括的配置每一个项都会生成一个apk包。

include 'x86','armabi'

如果这样配置,会生成两个包,一个只包含x86的so库,一个只包含armabi的so库。不能满足项目的要求,项目要求的是一个只包含x86的库,一个包含armabi,armabi-v7a,armabi64-v8a这3个的库文件。

ndk{abiFilters:}过滤

这个指令可以配置只打包你配置的so库,没有配置的就不打包,很灵活。

//过滤x86的so库
ndk {
    abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}

这样配置会将armeabi,armeabi-v71,arm64-v8a这3个包下的so库都打包到一个apk,而不像splits会每一个包打一个apk.

//过滤x86的so库
ndk {
    abiFilters 'x86'
}

这样配的话就只会打包x86的so库。

你可能感兴趣的:(Android工具,gradle,ndk,apk打包,自动化测试)