找回密码
 立即注册
查看: 931|回复: 11

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

[复制链接]
发表于 2021-11-24 10:01 | 显示全部楼层 |阅读模式
问题描述

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] + (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();

    }
}
发表于 2021-11-24 10:08 | 显示全部楼层
大佬,小弟最近也在接Firebase,碰到同样的问题了,新版本的Gradle已经下载好了,怎么样更改Unity的设置让Unity去识别新版本的Gradle呢?
发表于 2021-11-24 10:14 | 显示全部楼层
var FileProvider = new AndroidJavaClass("androidx.core.content.FileProvider");为什么这样写之后还是报错?
发表于 2021-11-24 10:23 | 显示全部楼层
在build文件中的这里修改就好了
buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
    }
}
发表于 2021-11-24 10:30 | 显示全部楼层
这个需要检查"androidx.core.content.FileProvider"这个是否打包进包体了。可以反编译apk,去反编译的java文件中查看是否确实存在这个class
发表于 2021-11-24 10:35 | 显示全部楼层
大佬,按照你的方法解决了Program type already present: android.support.v4.app.INotificationSideChannel这个报错,然后又有了Program type already present: androidx.annotation.AnyRes这个报错,你遇到过嘛?
发表于 2021-11-24 10:36 | 显示全部楼层
这个看着像是有依赖库重复了,你需要检查下是不是你加载的库里边有某2个有依赖了相同的库
发表于 2021-11-24 10:44 | 显示全部楼层
你好 我用unity导入android 的原生sdk   原sdk的gradle中会依赖其他三方库 unity中怎么去依赖呢 刚接触unity不久  unity中能直接修改gradle增加 dependencies吗 位置在哪里 谢谢
发表于 2021-11-24 10:47 | 显示全部楼层
切换到gradle编译后,在plugins下会有一个maintemplate的文件,还哪里就好了
发表于 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] + (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

希望作者有空帮忙指点下,感谢
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-23 03:25 , Processed in 0.093936 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表