AndroidStudio使用Gradle

    xiaoxiao2021-09-07  129

    一:简介: Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。实现了依赖管理(跟Maven差不多)依赖管理的方式:从 maven 远程仓库、 nexus 私服、 ivy 仓库以及本地文件系统的 jars 或者 dirs 。 二:组成: 1.proguard-rules.pro:这个文件对Java代码编译生成的class文件进行反编译。具体的介绍如下:

    #指定代码的压缩级别 -optimizationpasses 5 #包明不混合大小写 -dontusemixedcaseclassnames #不去忽略非公共的库类 -dontskipnonpubliclibraryclasses #优化 不优化输入的类文件 -dontoptimize #预校验 -dontpreverify #混淆时是否记录日志 -verbose # 混淆时所采用的算法 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #保护注解 -keepattributes *Annotation* #如果引用了v4或者v7包 -dontwarn android.support.** #保持 native 方法不被混淆 -keepclasseswithmembernames class * { native <methods>; } #保持自定义控件类不被混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } #保持自定义控件类不被混淆 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } #保持 Parcelable 不被混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #保持 Serializable 不被混淆 -keepnames class * implements java.io.Serializable #保持 Serializable 不被混淆并且enum 类也不被混淆 -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient <fields>; !private <fields>; !private <methods>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } #保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可 #-keepclassmembers enum * { # public static **[] values(); # public static ** valueOf(java.lang.String); #} -keepclassmembers class * { public void *ButtonClicked(android.view.View); } #不混淆资源类 -keepclassmembers class **.R$* { public static <fields>; } #避免混淆泛型 如果混淆报错建议关掉 #–keepattributes Signature

    2.local.properties:包含了你的 sdk 配置,sdk的路径;当然你还可以配置 ndk 路径;格式与 sdk 一样。 3.settings.gradle:一般显示include ‘:app’,’:myapplication’…其中include包含的model是会被编译的 4.gradle.properties:此文件进行gradle的全局的管理,主要配置项目的全局的配置变量(编译版本的配置) 5.build.gradle这个文件比较重要说明如下:

    apply plugin: 'com.android.application' def releaseTime() { return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) } android { compileSdkVersion 23 buildToolsVersion "23" defaultConfig { applicationId "......" minSdkVersion 15 targetSdkVersion 23 versionCode 4 versionName "1.0.3" } buildTypes { release { } debug{ buildConfigField "boolean", "LOG_DEBUG", "true" } } //设置虚拟机堆内存空间大小,避免在编译期间OOM dexOptions { incremental true javaMaxHeapSize "4g" } //打包不检查 lintOptions { checkReleaseBuilds false abortOnError false } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':library:photoPicker') }

    以上就是基本的build.gradle的配置, a)apply plugin:必须放在第一行,它可以指定这个module是一个应用(用 apply plugin: ‘com.Android.application’ 配置),或是一个库(用 apply plugin: ‘com.android.library’ 配置)。 b)dependencies:指定远程的依赖或者是本地的依赖, 编译时依赖libs目录下所有的jar文件:

    compile fileTree(include: ['*.jar'], dir: 'libs')

    编译时依赖本地的library库项目:

    compile project(':library')

    编译时依赖远程的库项目(下面的库是在低版本中使用Meterial Design是所要加入的):

    compile 'com.android.support:appcompat-v7:21.0.3'

    d)android的配置比较复杂: 指定编译版本的SDK和编译工具的版本

    compileSdkVersion 21 buildToolsVersion 21.1.2

    defaultConfig这个是默认配置,全局配置,其中的buildType将会自动的继承:举个例子

    defaultConfig { applicationId com.example.app.application minSdkVersion 15 targetSdkVersion 21 versionCode 1 versionName 1.0 ndk { moduleName app cFlags -DANDROID_NDK -D_RELEASE ldLibs m, log, jnigraphics abiFilters all } }

    此处apk项目需要指定applicationId(包名)library不需要指定这个属性;接下来就是SDK最小的编译版本,目标的编译版本,版本号和版本名称。至于ndk是指的是ndk可以被直接编译不需要自己操作。 buildTypes这个进行编译的配置,编译的配置分成两种主要是release(发行版),debug(调试版); compileOptions:这个是对Java版本的配置,毕竟jdk的版本不同所支持的新特性也不一样. sourceSets:重新指向源码路径

    sourceSets {//目录指向配置 main { manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件 java.srcDirs = ['src']//指定source目录 resources.srcDirs = ['src']//指定source目录 aidl.srcDirs = ['src']//指定source目录 renderscript.srcDirs = ['src']//指定source目录 res.srcDirs = ['res']//指定资源目录 assets.srcDirs = ['assets']//指定assets目录 jniLibs.srcDirs = ['libs']//指定lib库目录 } debug.setRoot('build-types/debug')//指定debug模式的路径 release.setRoot('build-types/release')//指定release模式的路径 }

    lintOptions:这个设置编译的lint开关。程序在build的时候,会执行lint检查,有任何错误或者警告提示,都会终止构建,我们可以将其关掉。

    lintOptions { abortOnError false }

    productFlavors:配置多个产品风味(免费版、付费版、不同渠道版)。创建不同版本的app,通过重写defaultConfig{}的设置。productFlavors是可选的。默认情况下,系统不会自动创建。每个flavor都可以自己的的application id。

    productFlavors { free { applicationId 'com.example.myapp.free' } paid { applicationId 'com.example.myapp.paid' } } }

    signingConfigs:包的签名的配置主要是指定包的签名的文件或者是包的签名的密码:

    signingConfigs { release { storeFile file(×.keystore) storePassword ××× keyAlias ×××× keyPassword ××× } }
    转载请注明原文地址: https://ju.6miu.com/read-677473.html

    最新回复(0)