关于 Unity 2019.2 版本升级到 Unity 2019.4 后导出 Android 工程的记录

由于发行的需求,原本的 Unity 2019.2 版本要升级到 Unity 2019.4 版本(为了要适配 Android 12)。

原因是 Unity 2019.2 打包后的项目在 Android 12 设备打开后白屏无法运行,于是使用空工程进行了测试,发现 Unity 2019.4 以后的版本都可以正常运行(没有测试 Unity 2019.3,但感觉应该也可以运行)。

在经过比对后还是决定使用 2019.4 版本。

由于发行那边的 sdk 只有安卓源生版本,所以我们为了方便集成其他的 sdk,采用的方式是先通过 Android Studio 把需要的 sdk 都集成到一个 AAR 包,之后将这个 AAR 包放入 Unity 工程。而由于项目本身需要添加 Firebase,所以还需要把 Untiy 工程导出成 Android 工程,之后把那个 google-service.json 文件放到 Android 工程目录中。(因为不使用 Unity 版的 firebase 插件的话,我不知道应该如何直接在 Unity 中整合这个 json 文件。。。)

于是问题来了。Unity 2019.3 以后的版本,在导出 Android 工程时的目录结构发生了改变。。。
在这里插入图片描述
如图所示,左边为 Unity 2019.2 以前的版本导出的 Android 工程。右边是 Unity 2019.3 以后的版本导出的 Android 工程,官方说是为了方便 Android 端的调用所以单独将 Unity 相关内容搞成了个模块,也就是 unityLibrary。具体相关内容可以参考官方链接,或者这篇文章

以下主要记录 Unity 2019.2 升级到 Unity 2019.4 以后,导出 Android 工程时需要注意的一些操作。具体的 Unity 和 Android 对接的内容依然可以参考以下文章:
Unity 工程对接 Android SDK 聚合广告


1、Android 导出 AAR 包时的问题

Android 端在制作 AAR 包时需要一个 Unity 端提供的 class.jar 文件,根据不同的 Unity 版本需要给出不同的 jar 文件,这个文件在 Unity 2019.4 中的目录为:
F:\Program Files\Unity 2019.4.38f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes

此路径前面的 F:\Program Files\ 是 Unity 的安装目录。而从 Unity 2019.3 以后,这个 class.jar 文件出现了一个变化,其中不再包括 UnityPlayerActivity.java 这个文件,此文件需要我们手动将其复制到 Android 项目中,其位置为:
F:\Program Files\Unity 2019.4.38f1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player

为了区分方便和看起来整齐,可以选择直接将
F:\Program Files\Unity 2019.4.38f1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com
这个文件夹复制过去,因为这个文件夹里只有 UnityPlayerActivity.java这么一个文件。

此外,之前我都直接将程序的 Icon 直接放在 AAR 包内,但是因为新版本改动的原因,可以不用再将 Icon 放在 AAR 包内了,因为可以将其放在 Unity 导出的安卓工程的 launcher 项目内。

而在制作成 AAR 包后,需要将其内部的 class.jar 以压缩文件方式打开,然后将其中的 UnityPlayerActivity.java 删除,防止之后 Unity 导出 Android 工程时打包发生的文件重复问题。

至此,AAR 包的准备工作就结束了。


2、Unity 工程内的一些设置

在之前的版本,可以通过在 Unity 工程的 Plugins\Android\ 目录目录下配置一个叫 mainTemplate.gradle 的文件来将一些打包的依赖项同步到导出的 Android 工程中。而新版本中,这个 gradle 被拆分成了三部分:
1、launcherTemplate.gradle
2、baseProjectTemplate.gradle
3、mainTemplate.gradle

这些文件的位置在:
F:\Program Files\Unity 2019.4.38f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates 中,可以直接复制过来后进行改写。

baseProjectTemplate.gradle 是项目最外层的 gradle 文件,其中配置远程依赖的仓库地址

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

allprojects {
    buildscript {
        repositories {**ARTIFACTORYREPOSITORY**
            google()
            jcenter()
            mavenCentral()
	
			// 添加项目需要依赖的远程库文件的地址,根据自身需求修改和添加
            maven { url 'xxx' }
          
        }

        dependencies {
            // If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
            // See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
            // See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
            // To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
            
            classpath 'com.android.tools.build:gradle:4.0.1'
            // 对接 google 相关 sdk 需要的配置
            classpath 'com.google.gms:google-services:4.3.5'
            **BUILD_SCRIPT_DEPS**
        }
    }

    repositories {**ARTIFACTORYREPOSITORY**
        google()
        jcenter()
        flatDir {
            dirs "${project(':unityLibrary').projectDir}/libs"
        }
        mavenCentral()
        
       // 添加项目需要依赖的远程库文件的地址,根据自身需求修改和添加
       maven { url 'xxx' }
    }
}

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

mainTemplate.gradle 是模块 unityLibrary 中的 gradle 文件,其中配置项目的依赖项

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

apply plugin: 'com.android.library'
**APPLY_PLUGINS**

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    // 添加各种依赖项,根据需求修改和添加
    implementation 'xxx'

    // 为了防止出现 Error: Cannot fit requested classes in a single dex file
    implementation 'com.android.support:multidex:1.0.3'

    implementation 'android.arch.work:work-runtime:1.0.1'

    // 为了解决一个和 guava 有关的重复引用 bug 而添加此依赖
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

**DEPS**}

android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
        consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**

        // 为了防止出现 Error: Cannot fit requested classes in a single dex file
        multiDexEnabled true
    }

    lintOptions {
        abortOnError false
    }

    aaptOptions {
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }**PACKAGING_OPTIONS**
}**REPOSITORIES****SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**

剩下的就配置到 launcherTemplate.gradle

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

apply plugin: 'com.android.application'

dependencies {
    implementation project(':unityLibrary')

    // 为了防止出现 Error: Cannot fit requested classes in a single dex file
    implementation 'com.android.support:multidex:1.0.3'

    implementation 'android.arch.work:work-runtime:1.0.1'

    // 为了解决一个和 guava 有关的重复引用 bug 而添加此依赖
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

}

android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        applicationId '**APPLICATIONID**'
        ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'

        // 为了防止出现 Error: Cannot fit requested classes in a single dex file
        multiDexEnabled true
    }

    aaptOptions {
        noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**]
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }**SIGN**

    lintOptions {
        abortOnError false
    }

    buildTypes {
        debug {
            minifyEnabled **MINIFY_DEBUG**
            useProguard **PROGUARD_DEBUG**
            proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG**
            jniDebuggable true
        }
        release {
            minifyEnabled **MINIFY_RELEASE**
            useProguard **PROGUARD_RELEASE**
            proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG**
        }
    }**PACKAGING_OPTIONS****PLAY_ASSET_PACKS****SPLITS**
**BUILT_APK_LOCATION**
    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = false
        }
        abi {
            enableSplit = true
        }
    }
}**SPLITS_VERSION_CODE****LAUNCHER_SOURCE_BUILD_SETUP**

// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin

3、导出 Android 工程后的操作

google-service.json 文件放到 launcher 目录中,配置好 Icon 后,就可以正常打包了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity 2019.4.x中文文档是指为Unity 2019.4.x版本提供的中文版文档。这份文档是Unity官方提供的开发指南,旨在帮助开发人员使用Unity游戏引擎来创建游戏和应用程序。 Unity 2019.4.x中文文档覆盖了各个方面的内容,包括Unity界面的介绍,项目管理,场景编辑,游戏对象的创建与编辑,材质和纹理的应用,光照和阴影的处理,物理引擎的使用,动画的创建与控制,音频的处理,以及用户界面的设计等等。 这份文档提供了详细的说明和示例,以帮助开发人员了解和掌握各个功能和工具的使用方法。通过阅读文档,开发人员可以学习如何使用Unity的各种组件和系统来实现自己的游戏或应用程序的需求。 同时,Unity 2019.4.x中文文档也提供了大量的编程接口文档,涵盖了Unity中的各种类和函数的用法和说明。这些接口文档使开发人员能够更好地理解Unity引擎的内部结构和工作原理,以便更加高效和灵活地进行开发工作。 总之,Unity 2019.4.x中文文档是Unity官方提供的重要参考资料,对于想要使用Unity引擎进行游戏和应用程序开发的开发人员来说,是一份不可或缺的指南和学习资料。 ### 回答2: Unity 2019.4.x中提供了全面的中文文档支持,为用户提供了更方便、直观的学习和使用体验。 首先,Unity的中文文档涵盖了各个方面的内容,包括引擎的各个模块、功能的使用、编辑器的操作指南等。无论是初学者还是有一定经验的开发者,都能够在中文文档中找到自己需要的信息,帮助他们更好地了解和使用Unity。 其次,Unity的中文文档以详细的说明和示例来解释每个功能和概念。无论是脚本编程、场景编辑、粒子系统还是动画制作,中文文档中都会提供清晰的步骤和例子,帮助用户理解和掌握各种功能。 另外,Unity的中文文档还会根据官方版本进行及时的更新,保持与最新版本Unity保持同步。这意味着用户可以始终获得最新的特性和改进的详细解释,帮助他们更好地利用Unity的最新功能进行开发。 最后,Unity的中文文档还提供了丰富的教程和案例,使用户可以通过实际操作来学习。这些教程和案例涵盖了不同类型的游戏和应用开发,供用户参考和借鉴。用户可以通过这些实例来加深对Unity的理解,并且可以根据自己的实际需求进行修改和扩展。 总的来说,Unity 2019.4.x中文文档为用户提供了全面、详细的学习和使用指南,帮助他们更好地掌握Unity的各种功能和技术。这些文档的存在使得Unity成为了一个广受欢迎的开发工具,为用户创造了更好的开发环境。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值