Gradle连载8-构建的应用类型和使用混淆、共享库

一、构建的应用类型

  • 在Gradle工程中,内置了debug和release两种构建类型,这两种模式的差别在于,能否在设备上调试以及签名不一样,其他代码和资源文件都是一样的
  • 如果想要增加新的构建类型,可以再buildTypes{}代码块中继续添加元素就可以了,buildTypes和signingConfigs一样,也是Android的一个方法,接受的参数是一个域对象NamedDomainObjectContainer,添加的每一个都是BuildType类型,下面列举常用配置

1.applicationIdSuffix

  • 是BuildType的一个属性,用于配置基于默认applicationId的后缀,比如默认defaultConfig中配置的applicationId为org.flysnow.app.example82.我们在debug的BuildType中的指定applicationSuffix为debug,那么构建生成的包名就是org.flysnow.app.example82.debug

2.debuggable

  • 配置是否生成一个可供调试的apk,其值为true或者false

3.jniDebuggable

  • 用于配置是否生成一个可以供调试Jni代码的apk,接受boolean类型的值

4.minifyEnabled

  • 用于配置该BuildType是否可以使用Proguard混淆,接受一个boolean类型值

5.multiDexEnabled

  • 用于配置该BuildType是否启用自动拆分多个Dex的功能

6.proguardFile

  • 用于配置Proguard混淆使用的配置文件,和前面讲的defaultConfig中的proguardFile一样

7.proguardFiles

  • 用于配置Proguard混淆使用的配置文件,该方法可以同时配置多个Proguard配置文件

8.shrinkResources

  • 用于配置是否自动清理未使用的资源,默认为false

9.signingConfig

  • 配置该BuildType使用的签名配置

每一个BuildTYpe都会生成一个SourceSet,默认位置就是src//
每一个SourceSet都包含源代码,资源文件信息
新增的BuildTYpe名字,不能是main、androidTest,这两个已经被占用了
每个BuildType还会生成相应的assemble任务,如果常用的assembleRelease和assembleDebug就是Gradle自动生成的两个Task任务,他们是release和debug,这两个BuildType自动创建生成的,执行相应的assemble任务,就能生成对应BuildType的所有apk。

二、使用混淆

  • 启用混淆
  • BuildType中的属性minifyEnabled的值设置为true
android {
	buildTypes {
		release {
			minifyEnabled true
		}
		debug {
		}
	}
}
  • 使用Proguard来配置文件,现在为我们的混淆指定配置文件
android {
	buildTypes {
		release {
			minifyEnabled true
			proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro')
		}
		debug {
		}
	}
}

三、启用zipalign优化

  • 这是一个整理优化apk文件的工具,提供系统和应用的运行效率,更快地读写apk中的资源,降低内存的使用,所以对于要发布的app,一定要使用zipalign进行优化
  • 只需要开启开关即可,剩下的android SDK会搞定
android {
	buildTypes {
		release {
			zipAlignEnabled true
		}
	}
}
  • zipAlignEnabled是BuildType的一个属性,接受一个boolean类型的值

四、使用共享库

  • Android一些包,比如android.content,android.view等是默认包含在SDK之中的,app使用的时候,系统会自动链接它们,还有一些库com.google.android.maps\android.test.runner等,这些库都是独立的,并不会被系统自动链接,所以在我们使用的它们的话,就需要单独进行生成使用,这类的库就可以称之为共享库
  • 在AndroidManifest文件中,我们可以指定要使用的库:
<uses-library
	android:name"com.google.android.maps"
	android:required="true" />
  • 声明了需要的共享库,在安装apk的时候,就会根据定义,检测手机系统是否有我们需要的共享库,因为已经设置了android:required=“true”, 如果手机系统不满足,将不能安装该应用
  • 除了标准的SDK,还有两种库
    • add-ons库,位于add-ons目录下,这些库大部分是第三方厂商或者公司开发的,一般是为了让开发者使用,但是又不想暴露具体标准实现
    • optional库,位于platforms/android-xx/optional目录下面,一般是为了兼容旧版本的API,比如org.apache.http.legacy,这是一个HttpClient的库,就必须使用og.apache.legacy这个库

五、源码

  • gitee路径:https://gitee.com/dongqianrui/AndroidStudioProject/tree/master/Test1
  • CSDN:https://blog.csdn.net/weixin_44630050
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值