自Unity2019.2.x之后,由于Unity的classes.jar库作了更改,导致AS(AndroidStudio简称)不能顺利结合Unity接入SDK或者安卓的功能了,经过一番查找翻阅后,在这里总结了一些经验和自己的方式,已经过实际项目测试!
开发工具版本介绍:
Unity:2019.4.14
AndroidStudio:4.2.2
1.先创建一个空白AS工程,设置好包名和最低API等级:
2.点击Finish等待工程创建成功后,得到如下展开方式的目录结构,然后我们需要删除一些没用的文件和内容:
3.检查gradle.properties文件中的使用AndroidX设置以及自动转换第三方库以使用AndroidX的设置,没有就给加上:
4.根据Unity版本对应的Gradle版本和gradle插件版本来设置AS中相应地方的版本:
从上图中可以知道Unity2019.4.14的gradle版本是5.1.1,gradle插件版本是3.4.0,我们对照Android官方的表查看,也是一一对应的安卓Gradle官网:
5.获取了Unity的gradle相关版本当然就是去AS中设置了:
6.更改完毕并同步后,AS项目中添加Unity的classes.jar库和UnityPlayerActvity.java脚本,以前是只需要添加jar库就好了的,目前Unity新的处理方式classes.jar包中没有包含UnityPlayerActvity.java这个脚本了:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716173004204.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteDUxNjY=,size_16,color_FFFFFF,t_70
7.设置build.gradle(:app)文件中的编译命令、各种版本设置、导入的库设置等,直接贴上代码,里面有注释:
//application是以APK的形式打包,最终可以在安卓上世界运行
//plugin以插件的形式进行编译打包,最终为aar格式,与jar包(老式)一样都可以嵌入到Unity中
//apply plugin: 'com.android.application'
//apply plugin: 'com.android.library'
//上面是老版本的打包命令,现在只能用下面的形式,不然打包报错
//plugins {
// id 'com.android.application'
//}
plugins {
id 'com.android.library'
}
android {
compileSdkVersion 30
defaultConfig {
minSdkVersion 19
targetSdkVersion 30
versionCode 1
versionName "1.0"
ndk {
// 设置支持的SO库架构
abiFilters'armeabi','armeabi-v7a','x86_64','arm64-v8a','x86'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
res.srcDirs = ['src/main/res', 'src/main/res/xml']
}
}
//用来解决as工程的包名和Unity包名相同的冲突报错问题,不生成BuildConfig,Unity打包的时候自己也会生成
afterEvaluate {
generateReleaseBuildConfig.enabled = false
generateDebugBuildConfig.enabled = false
}
}
dependencies {
//限定libs文件夹下的jar包,仅仅可以在内部访问,无法在外部其他的module调用
implementation fileTree(dir: "libs", include: ["*.jar"])
//Unity相关库导入
implementation files('libs\\classes.jar')
//系统相关
implementation "androidx.core:core:1.6.0"
}
下面dependencies中的一些导入说明:
还有一个build.gradle(项目名称)的文件里面的设置也贴出来吧:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
mavenCentral()
maven {url 'https://maven.google.com/'}
maven {url 'https://dl.bintray.com/jetbrains/anko'}
}
dependencies {
classpath "com.android.tools.build:gradle:3.4.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon
// 添加下面的内容,添加依赖项
flatDir {
dirs 'libs'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
8.代码部分的编写和更改啥的:
9.由功能需要,配置AndroidManifest.xml,以及添加一些xml文件和内容,这些xml到时候是需要复制到Unity里面的,后续也会说到:
10.AS这边啥都搞定好了,然后点击Build->Make Project就能生成初步的包了,以前是使用aar,现在我发现aar里面会包含一些无用资源,对aar里面的代码classes.jar再进行删除内容很麻烦,做一就改用jar了,而且这个jar包只包含代码部分,也方便删除不要的代码:
11.现在AS这边都处理完了,要去Unity那边了,首先我们将打包出来的classes.jar和一些xml文件复制到Unity的Plugins/Adnroid/下:
12.该对classes.jar中的多余脚本进行删除了,之前也说过,Unity自己这边也有,删除的代码就是之前从Unity的安装目录下复制过去的,不删除就会报重复或者覆盖之类的错:
13.补充一下AndroidManifest.xml中关于Unity的配置:
14.很重要的一步,之前说过了,需要下载安卓的核心包,放到Android目录下,不然到时候报错找不到安卓相关的API和类了,我们需要准备两个,一个给AndroidX系统及以上的手机使用,一个给老版本系统的手机使用:
下载这些库需要翻墙的哦,这里直接贴上下载官网地址https://mvnrepository.com/,方便将来需要更新库好找,以及下载步骤:
还需要下载一个支持老版本的库,同样在搜索框中输入“legacy-support-v4”:
哇!!!终于写完了,恭喜看到的同学,希望你也学会了(Unity和安卓交互部分的我就不写了,和以前一样,网上也有很多教程)!