Unity升級gradle打包apk


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM