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();
}
} 大佬,小弟最近也在接Firebase,碰到同样的问题了,新版本的Gradle已经下载好了,怎么样更改Unity的设置让Unity去识别新版本的Gradle呢? var FileProvider = new AndroidJavaClass("androidx.core.content.FileProvider");为什么这样写之后还是报错? 在build文件中的这里修改就好了
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
}
} 这个需要检查"androidx.core.content.FileProvider"这个是否打包进包体了。可以反编译apk,去反编译的java文件中查看是否确实存在这个class 大佬,按照你的方法解决了Program type already present: android.support.v4.app.INotificationSideChannel这个报错,然后又有了Program type already present: androidx.annotation.AnyRes这个报错,你遇到过嘛? 这个看着像是有依赖库重复了,你需要检查下是不是你加载的库里边有某2个有依赖了相同的库 你好 我用unity导入android 的原生sdk 原sdk的gradle中会依赖其他三方库 unity中怎么去依赖呢 刚接触unity不久unity中能直接修改gradle增加 dependencies吗 位置在哪里 谢谢 切换到gradle编译后,在plugins下会有一个maintemplate的文件,还哪里就好了 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