APSchmidt 发表于 2021-11-24 10:01

unity3d修改gradle.properties,解决androidx兼容问题

问题描述

Google Firebase 使用了AndroidX库,然而各种第三方库还有使用support的库。Androidx是新版的support。编译中会出现冲突
解决方法


[*]gradle 升级到 3.2.+
[*]依赖的support都修改到28.+ (注意各库版本要一致)
[*]gradle.properties 添加配置 android.useAndroidX=true android.enableJetifier=true
遇到的问题


[*]unity2018+ 提供了IPostGenerateGradleAndroidProject来对gradle工程修改。工程使用的是unity2017不支持
[*]IPostBuild,IPreBuild都不能实现
[*]想要从gradle.build来解决,理解深度不够
有重要帮助的页面


[*]https://stackoverflow.com/questions/54186051/is-there-a-way-to-change-the-gradle-properties-file-in-unity/58004419#58004419
[*]https://github.com/googlesamples/unity-jar-resolver/issues/241#issuecomment-514995546
最终解决方法

最优方案,修改gradle

( + (rootProject.subprojects as List)).each {
    ext {
      it.setProperty("android.useAndroidX", true)
      it.setProperty("android.enableJetifier", true)
    }
}
符合unity2018+的优美点儿的方案

public class AndroidPostBuildProcessor : IPostGenerateGradleAndroidProject
{
    public int callbackOrder
    {
      get
      {
            return 999;
      }
    }


    void IPostGenerateGradleAndroidProject.OnPostGenerateGradleAndroidProject(string path)
    {
      Debug.Log("Bulid path : " + path);
      string gradlePropertiesFile = path + "/gradle.properties";
      if (File.Exists(gradlePropertiesFile))
      {
            File.Delete(gradlePropertiesFile);
      }
      StreamWriter writer = File.CreateText(gradlePropertiesFile);
      writer.WriteLine("org.gradle.jvmargs=-Xmx4096M");
      writer.WriteLine("android.useAndroidX=true");
      writer.WriteLine("android.enableJetifier=true");
      writer.Flush();
      writer.Close();

    }
}

XGundam05 发表于 2021-11-24 10:08

大佬,小弟最近也在接Firebase,碰到同样的问题了,新版本的Gradle已经下载好了,怎么样更改Unity的设置让Unity去识别新版本的Gradle呢?

zifa2003293 发表于 2021-11-24 10:14

var FileProvider = new AndroidJavaClass("androidx.core.content.FileProvider");为什么这样写之后还是报错?

RecursiveFrog 发表于 2021-11-24 10:23

在build文件中的这里修改就好了
buildscript {
    repositories {
      google()
      jcenter()
    }

    dependencies {
      classpath 'com.android.tools.build:gradle:3.2.0'
    }
}

franciscochonge 发表于 2021-11-24 10:30

这个需要检查"androidx.core.content.FileProvider"这个是否打包进包体了。可以反编译apk,去反编译的java文件中查看是否确实存在这个class

xiangtingsl 发表于 2021-11-24 10:35

大佬,按照你的方法解决了Program type already present: android.support.v4.app.INotificationSideChannel这个报错,然后又有了Program type already present: androidx.annotation.AnyRes这个报错,你遇到过嘛?

NoiseFloor 发表于 2021-11-24 10:36

这个看着像是有依赖库重复了,你需要检查下是不是你加载的库里边有某2个有依赖了相同的库

NoiseFloor 发表于 2021-11-24 10:44

你好 我用unity导入android 的原生sdk   原sdk的gradle中会依赖其他三方库 unity中怎么去依赖呢 刚接触unity不久unity中能直接修改gradle增加 dependencies吗 位置在哪里 谢谢

yukamu 发表于 2021-11-24 10:47

切换到gradle编译后,在plugins下会有一个maintemplate的文件,还哪里就好了

Ylisar 发表于 2021-11-24 10:56

unity版本2017.4.3,在unity中调用android的方法可以走通,接着在这个android方法里启动另外一个activity,这个activity继承AppCompatActivity,打包报错,提示找不到这个AppCompatActivity(该类是androidx下的,全包名androidx.appcompat.app.AppCompatActivity ),于是修改gradle文件,我修改的文件路径是D:\Unity3d\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates
按照文章中链接的做法,在apply plugin: 'com.android.application'中加上了
( + (rootProject.subprojects as List)).each {
    ext {
      it.setProperty("android.useAndroidX", true)
      it.setProperty("android.enableJetifier", true)
    }
}
但是打包出来后,依然是错误
Caused by: java.lang.ClassNotFoundException: Didn't find class androidx.appcompat.app.AppCompatActivity

希望作者有空帮忙指点下,感谢
页: [1] 2
查看完整版本: unity3d修改gradle.properties,解决androidx兼容问题