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