Android

Unity 开发之 Android 必要的基础知识(三)

2022-08-22 #Unity#Android#Gradle

本文迁移自旧站,保留当时的学习记录;涉及版本与实践结论的内容会在后续复查中逐步更新。

Gradle

什么是Gradle

Gradle是一款基于Apache的Ant和Maven概念的项目自动化开源构建工具,是Android的主流构建工具

首先看看Unity导出的Android工程中的gradle文件在目录中的位置

文件目录

Unity导出为Gradle工程时,Unity会创建拥有两个模块的Gradle工程

❗️launcher 作为启动unityLibrary模块的简单android应用,这个模块可以用别的android应用替换

❗️unityLibrary unityLibrary包含了unity运行时以及资源和数据,这个模块作为一个库可以整合到任何一个Gradle项目中,

也就是说,Unity在导出到android后,自动为我们创建了一个简单的android工程,以及一个启动模块,和一个包含所有unity相关运行时、资源、数据的库模块,启动模块负责依赖库模块,并且启动它

图中编号对应的gradle文件:

  1. launcher模块级 build.gradle
  2. unityLibrary模块级 build.gradle
  3. 项目级 build.gradle
  4. 项目级 settings.gradle

launcher模块级 build.gradle

launcher模块是工程的启动模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

//定义模块属性
//com.android.application :
// application属性,可以独立运行的Android程序,也就是我们的APP;
//com.android.library :
// library属性,不可以独立运行,一般是Android程序依赖的库文件
// 上文提到的unity模块就是这个属性,只能被依赖,不能独立运行
apply plugin: 'com.android.application'

//依赖项
dependencies {
//依赖unityLibrary,unity编译后的所有资源全部在unityLibrary模块中
implementation project(':unityLibrary')
}

android {
compileSdkVersion 29 //编译环境下的sdk版本,IDE会基于这个版本提供开发环境的功能
buildToolsVersion '30.0.2' //指定项目构建工具的版本.

compileOptions {
// encoding 'UTF-8' //加载的 Java 源文件的编码 , 默认为 UTF-8 , 类型为字符串

// incremental true //是否启用 gradle 新增加的 增量模式,默认True

sourceCompatibility JavaVersion.VERSION_1_8 //编译使用的 Java 版本
targetCompatibility JavaVersion.VERSION_1_8 //生成 Java 字节码版本
}

defaultConfig {

minSdkVersion 21 //最低支持的sdk版本

//向前兼容,比如某个Api在不同版本里功能发生了变化,记作a和b
//那么不同的版本的系统会根据targetSdkVersion来决定用a还是b
targetSdkVersion 29
applicationId 'xxx.xxx.xxx'
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
versionCode 1101
versionName '1.101'
}

//aapt全称Android Asset Packaging Tool 即编译资源文件的工具
aaptOptions {
//不压缩
noCompress = ['.unity3d', '.ress', '.resource', '.obb', '.gitkeep']
//忽略
ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
}

//签名文件配置
signingConfigs {
release {
storeFile file('xxx/xx/xxx/xxx/xxx.keystore')
storePassword 'xxx'
keyAlias 'xxx'
keyPassword 'xxx'
}
}

// 代码检查工具
lintOptions {
abortOnError false
}

buildTypes {
debug {
minifyEnabled false
useProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt')
signingConfig signingConfigs.release
jniDebuggable true
}
release {
minifyEnabled false
useProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt')
signingConfig signingConfigs.release
}
}

//打包成APK配置的选项
// pickFirsts ——当出现重复文件 会使用第一个匹配的文件打包进入apk,默认为空
// merges ——当出现重复文件时合并重复的文件打包进入apk,默认值为/META-INF/services/**,
// 调用merge方法时候不会附加默认值,而调用setMerges会覆盖掉默认值
// excludes ——打包的时候排除匹配的文件
packagingOptions {
doNotStrip '*/armeabi-v7a/*.so'
doNotStrip '*/arm64-v8a/*.so'
}

bundle {

//封装用于构建每种语言(或语言环境)对应的APK的设置
language {
enableSplit = false
}

//封装用于构建每屏幕密度对应的APK的设置
density {
enableSplit = false
}

//封装用于构建每个ABI 对应的APK的设置
abi {
enableSplit = true
}
}
}

unityLibrary模块级 build.gradle

和launcher其实没多大区别,以后再补充

项目级 build.gradle

也叫顶级build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

allprojects {
// 这里面是gradle脚本执行所需依赖,分别是对应的maven库和插件库。
buildscript {
// Maven库
repositories {
google() // google的Maven库
jcenter()
}
// 依赖
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'

}
}
// 项目中的所有module配置的共同模块
repositories {
google()
jcenter()
// 库存放路径
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
// 其他库
maven { url "https://sdk.tapjoy.com/" }
maven { url 'https://android-sdk.is.com/' }
maven { url 'https://verve.jfrog.io/artifactory/verve-gradle-release' }
maven { url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea" }
maven { url 'https://artifact.bytedance.com/repository/pangle' }
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

项目级 settings.gradle

工程配置文件 该文件一般情况下不需要修改

1
2
//项目包含的模块
include ':launcher', ':unityLibrary'

关于Unity导出Android的常用Gradle文件就这些了,其实还有很多配置,但是掌握上文这些基本够用了

TO BE CONTINUE!

评论
分享