Unity升級gradle打包apk
- 這里Unity2018.4.36,Android studio2020.3.1 Patch 3
- 修改Unity設置Edit->Preferences->External Tools 取消勾選Gradle Installed with Unity 瀏覽到Android Studio自帶的gradle(這里是gralde-7.0.2)
- 修改unity配置 使用自定義mainTemplate.gradle 勾選File->Build Settings->Player Settings->Android->Publish Settings->Custom Gradle Template, 在工程中生成Plugins->Android->mainTemplate.gradle文件
- 修改mainTemplate.gradle
buildscript->dependencies中修改classpath 提升gradle版本com.android.tools.build:gradle:7.0.0
dependencies下加入需要依賴的庫
com.google.android.gms:play-services-auth:19.2.0
com.android.billingclient:billing:4.0.0
pub.devrel:easypermissions:3.0.0
android->aaptOptions中**STREAMING_ASSETS**會列出所有StreamingAssets目錄下的文件,文件數量多的時候會導致出包非常慢甚至出包失敗,默認的選項修改為通配符
Unity打包過程臨時生成的apk在升級gradle以后不匹配會報找不到apk文件,修改生成的apk文件名字android塊中添加
android.applicationVariants.all {variant ->
variant.outputs.all {
outputFileName = "gradleOut-release.apk"
}
}
- 新版gradle要求使用Java11, Unity中Editor目錄添加文件生成gradle.properties, org.gradle.java.home值為Java11 jre所在目錄代碼如下:
using UnityEditor.Android;
using System.IO;
public class AndroidPostBuildProcessor : IPostGenerateGradleAndroidProject
{
public int callbackOrder
{
get
{
return 999;
}
}
void IPostGenerateGradleAndroidProject.OnPostGenerateGradleAndroidProject(string 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("org.gradle.java.home=C:/Program Files/Android/Android Studio/jre");
writer.WriteLine("android.useAndroidX=true");
writer.WriteLine("android.enableJetifier=true");
writer.Flush();
writer.Close();
}
}
- 其它問題
androis studio 導出jar包里面會帶com.xxx.xxx.BuildConfig.class,直接放到Unity打包會報錯BuildConfig.class重復,用解壓工具打開jar刪除里面的BuildConfig.class
導出代碼jar包到unity里面使用(aar沒這個問題),代碼中引用res資源his.getString(R.string.strId)會找不到,使用反射獲取
String srt = AndroidUtil.getRStr("string_id", this);
/**
* 根據給定的類型名和字段名,返回R文件中的字段的值
* @param fieldName 字段名
* @return 字段的值
* @throws Exception
*/
public static String getRStr(String fieldName, Context context){
String retStr = null;
try {
int stringId = context.getResources().getIdentifier(fieldName, "string", contextgetPackageName());
retStr = context.getResources().getString(stringId);
} catch (Exception e) {
Log.d(""+context.getClass(),"can't find"+ context.getPackageName() +".R$string +fieldName);
return null;
}
return retStr;
}
wzby安卓工程導出aar的時候報錯本地aar不能直接依賴,臨時改用compileOnly