-
demo.apk unity自动更新 内部安装Apk
2019-12-19 15:58:10unity 内部更新Apk 自动安装 支持安卓8.0 以上 demo.apk 测试包 -
unity remote 5(*.apk)
2017-12-24 13:25:09unity remote 5 android apk unity remote android手机调试unity -
Unity自动打包Apk
2018-02-06 18:17:19Unity自动打包Apk unity打包apk相对来说比较容易,相信出过的人都明白,出包过程,没有大的难度,一步一操作,一步一等待,繁琐耗时,不懂的人又代替不了。这时候需求就来了,如何简单的一键打包搞定,这个就稍微...Unity自动打包Apk
unity打包apk相对来说比较容易,相信出过的人都明白,出包过程,没有大的难度,一步一操作,一步一等待,繁琐耗时,不懂的人又代替不了。这时候需求就来了,如何简单的一键打包搞定,这个就稍微有点难度,当然作为程序员就是要解决这些问题,封装变化,变繁为简。打包apk大概可以分为以下步骤(出apk需要的jdk,Android sdk这些不用多说,相信大家都会配置)
1、配置PlayerSetting
2、配置渠道等第三方SDK
3、copy外部资源和一些自己工程需要的一些配置
4、unity打包build(如果出成Android工程,还需要就行Android工程的自动打包apk)没有什么难的东西,都是一些配置,繁琐的东西,一键化也就是写个脚本,按照步骤一步一步的执行就行了
很简单相信大家都会,只是一些细节需要注意一下,细节中还是有一些坑的一、配置PlayerSetting
有两种方法
1、事先使用PlayerSetting 编辑页面保存一个配置好的ProjectSettings.asset,需要的时候直接替换掉ProjectSettings目录下的ProjectSettings.asset就行了
设置分离obb文件的属性,有的人可能不知道
2、使用代码设置PlayerSetting(凡是在PlayerSetting编辑页面看到的属性都是可以使用代码进行设置的)
(1)、Unity提供了命令行方式进行打包、调用方法等操作
command line形式: unity执行文件路径 -projectPath 项目工程路径 -executeMethod 方法名 各种参数
在unity项目Editor下的一个继承ScriptableObject的文件中的static方法都可以使用unity command line执行(注意Unity需要是关闭的)$unity_path -projectPath $project_path -quit -batchmode -executeMethod ProjectBuild.ProjectSetting -qmplatform $platform //$unity_path unity执行文件路径 //$project_path 项目工程路径 //-batchmode 不打开unity //-executeMethod 执行unity方法 //ProjectBuild.ProjectSetting Editor下的脚本名为ProjectBuild,其中有个名为ProjectSetting的方法,具体代码如下 //-qmplatform $platform 传入的参数
(2)、有一些属性设置,比较难找,使用 PlayerSettings.SetPropertyInt(“ScriptingBackend”, (int)ScriptingImplementation.Mono2x, BuildTarget.iPhone); 慢慢尝试
class ProjectBuild : Editor { const string OPT_PLATFORM = "-qmplatform"; const string OPT_BUNDLE_VERSION = "-qmbundle_version"; const string OPT_SHOW_VERSION = "-qmshow_version"; const string OPT_VERSION_CODE = "-qmversion_code"; /// <summary> /// 根据参数配置Unity ProjectSetting /// </summary> static void ProjectSetting() { Dictionary<string, string> settings = new Dictionary<string, string>(); settings[OPT_PLATFORM] = ""; settings[OPT_BUNDLE_VERSION] = ""; settings[OPT_SHOW_VERSION] = ""; settings[OPT_VERSION_CODE] = ""; string[] args = System.Environment.GetCommandLineArgs(); ParseArgs(settings, args);//解析参数 PlayerSettings.companyName = "****"; PlayerSettings.bundleVersion = settings[OPT_BUNDLE_VERSION]; PlayerSettings.shortBundleVersion = settings[OPT_SHOW_VERSION]; PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation; PlayerSettings.allowedAutorotateToLandscapeLeft = true; PlayerSettings.allowedAutorotateToLandscapeRight = true; PlayerSettings.strippingLevel = StrippingLevel.StripByteCode; PlayerSettings.aotOptions = "nimt-trampolines=512,ntrampolines=2048"; PlayerSettings.targetGlesGraphics = TargetGlesGraphics.Automatic; PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto; PlayerSettings.Android.targetDevice = AndroidTargetDevice.FAT; PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel9; PlayerSettings.Android.forceInternetPermission = true; PlayerSettings.Android.forceSDCardPermission = true; PlayerSettings.Android.bundleVersionCode = int.Parse(settings[OPT_VERSION_CODE]); PlayerSettings.Android.useAPKExpansionFiles = true;//是否使用obb分离模式 PlayerSettings.productName = "******"; PlayerSettings.bundleIdentifier = "*****"; PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "宏定义");//宏定义的设置 EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.Android); } }
(3)、对于一些如Icon、splash页面的设置可以使用原名替换图片的方法
(4)、 PlayerSettings.Android.useAPKExpansionFiles = true;//是否使用obb分离模式,这个主要是针对Google play的
obb的命名,是需要一定的规则的,不然无法使用,可以使用代码自动设置obb的名字在Editor目录下有这个方法,出包时会自动调用,可以在这里设置
(如果需要对dll文件进行加密的话,肯定是出成了Android工程,这里可以获取Android工程中的dll文件进行加密,同时替换可以解密的so文件)[PostProcessBuild(90)] public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject) { files = Directory.GetFiles(pathToBuiltProject, "*", SearchOption.AllDirectories); if (files != null) { foreach (string fileName in files) { if (fileName.Contains(".obb")) { int bundleVersion = PlayerSettings.Android.bundleVersionCode; string bundlePackageName = PlayerSettings.bundleIdentifier; Directory.Move(fileName, pathToBuiltProject + "/main." + bundleVersion + "." + bundlePackageName + ".obb"); } } } }
obb的使用上的还有一点小小的坑,Google play商店在下载游戏的时候,会自动下载apk所需的obb,但是有时候也不能保证一定成功,所以需要项目本身就具有这样的检测下载功能https://www.assetstore.unity3d.com/en/#!/content/3189这里有非常详细的代码,可以copy直接使用
二、配置渠道等第三方SDK和copy外部资源
1、sdk的接入
统一接口,支持不同各种渠道的sdk接入
http://blog.csdn.net/chenjie19891104/article/details/42217281这个可以看一下
2、和不同渠道绑定的参数,建议拿出来做配置,可以不用重新出版本就可以切换不同渠道的版本
3、sdk切换相关目录资源的替换,unity直接出成apk的话,就在unity打包之前,如果是先出Android工程的话,也可以在Android工程中进行,效率会更快一点,不需要再从unity build就可以出成不同的渠道包三、unity打包build
unity build Android 可以直接打包成apk或是Android工程,使用命令行调用的方式跟上面ProjectSetting的类似,-executeMethod 的参数名换成相应函数名即可,
static void Build() { string android_project_path = "";//目标目录 BuildTarget target = BuildTarget.Android; string[] outScenes = GetBuildScenes();//需要打包的scene名字数组 BuildPipeline.BuildPlayer(outScenes , android_project_path, target, BuildOptions.AcceptExternalModificationsToPlayer); } // BuildOptions.AcceptExternalModificationsToPlayer 表示出成Android工程 // BuildOptions.AcceptExternalModificationsToPlayer 表示出成Android工程
直接打包apk就不用多说了,build成功就行了
出成Android工程后还需要几步才能完成
1、Android工程,自动打包apk,需要配置ant环境到官方主页http://ant.apache.org下载新版(目前为Ant1.9.6)的ant,得到的是一个apache-ant-1.9.6-bin.zip的压缩包。将其解压到你的硬盘上,例如:C:\apache-ant-1.9.6。然后配置环境变量
ANT_HOME C:/ apache-ant-1.9.6
path C:/ apache-ant-1.9.6/bin
classpath C:/apache-ant-1.9.6/lib2、可以在Android工程中进行资源和渠道SDK的替换(也就是目录文件的替换),这样可以一个工程出成不同的渠道包
3、签名的需要的ant.properties,这里写着Android签名文件的目录,用户名和密码,需要事先写好,copy到Android工程目录下key.store=./config/xxx.keystore
key.alias=xxx
key.store.password=xxx
key.alias.password=xxx4、使用Android command line生成build.xml(这是ant签名打包的必须文件)
command line形式: android update project -p Android工程路径 -n 生成apk的名字(这个command line的使用需要配置一下环境变量)android update project -n $apk_name -t 1 -p “$android_pj_path”
//$apk_name 生成apk的名字
//”$android_pj_path” Android工程路径5、使用ant release,这个command line需要在Android工程目录下执行,不然command line会找不到路径,最后在bin目录下生成apk文件,有签名的和不签名的
可以考虑与Jenkin结合使用,会更方便操作 -
unity4可以生成apk而unity 5生成不了apk问题
2017-06-24 18:22:37unity4可以正常生成apk,5不可以 是应为生成的android的jar有问题,生成androidjar需要在ec上生成,只选择src和res 这样就可以正常生成apk,用as生成的jar在5上不可以是因为as生成的jar或自动生成R的路径,照成5上...unity4可以正常生成apk,5不可以 是应为生成的android的jar有问题,生成androidjar需要在ec上生成,只选择src和res 这样就可以正常生成apk,用as生成的jar在5上不可以是因为as生成的jar或自动生成R的路径,照成5上编译不通过,显示 warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.xxx.xxx.xxx$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
所以解决方法,用ec生成jar 不要用as去生成jar,ec生成jar值选 src和res 别的都不要,这样的jar就可以通过编译了 ,而且apk不会有问题可以正常运行 -
Unity发布Android APK去掉Unity启动Logo教程
2020-04-01 13:37:04Unity发布Android APK去掉Unity启动Logo教程 我们要解决的问题: 黑屏时间问题和启动Logo问题,之所以黑屏是因为Activity启动后mUnityPlayer 中的内容还没有准备好,断在我们游戏设置的启动页前面的黑屏状态是IOS或... -
Unity中安装APK
2021-01-21 15:04:16这是一个Unity源码,在Unity中安装APK应用 -
Unable to build apk in Unity3d
2020-12-02 01:20:44<p>I am having issues while making build for Android platform in Unity. The exceptions say this: <p>Assets/Parse/Parse/Internal/PlatformHooks/Unity/PlatformHooks.Unity.cs(1059,27): error CS0234: The ... -
unity打包apk加密工具及unity package包
2020-11-17 10:07:24unity开发工具制作app 安装到平板上加入授权 一个apk只能安装一次 放入其他平板安装使用不了 需要授权 -
Jenkins 打包Unity APK
2017-12-21 20:11:51Jenkins 打包Unity APK新建一个Unity 工程,添加编辑器打包脚本编辑器脚本 APKBuild.cs 编辑状态下调用 APKBuild中 Build 方法,执行打包, 测试成功开始编写 批处理脚本 Unity.bat 通过批处理脚本调用 APKBuild中...Jenkins 打包Unity APK
新建一个Unity 工程,添加编辑器打包脚本
编辑器脚本 APKBuild.cs
编辑状态下调用 APKBuild中 Build 方法,执行打包,
测试成功开始编写 批处理脚本 Unity.bat 通过批处理脚本调用 APKBuild中 Build 方法 执行打包
执行批处理打包成功开始在Jenkins新建项目APKBuild.cs 代码如下
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; public class APKBuild : Editor { [MenuItem("Tool/APKBuild")] public static void Build() { BuildTarget buildTarget = BuildTarget.Android; // 切换到 Android 平台 EditorUserBuildSettings.SwitchActiveBuildTarget(buildTarget); // keystore 路径, G:\keystore\one.keystore PlayerSettings.Android.keystoreName = "G:\\keystore\\one.keystore"; // one.keystore 密码 PlayerSettings.Android.keystorePass = "123456"; // one.keystore 别名 PlayerSettings.Android.keyaliasName = "bieming1"; // 别名密码 PlayerSettings.Android.keyaliasPass = "123456"; List<string> levels = new List<string>(); foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes) { if (!scene.enabled) continue; // 获取有效的 Scene levels.Add(scene.path); } // 打包出 APK 名 string apkName = string.Format("./{0}.apk", "Test"); // 执行打包 string res = BuildPipeline.BuildPlayer(levels.ToArray(), apkName, buildTarget, BuildOptions.None); AssetDatabase.Refresh(); } }
在编辑器下可以调用 Build() 方法执行打包 APK
新建批处理脚本 Unity.bat
H:\Unity\Unity\Editor\Unity.exe -projectPath G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo -quit -batchmode -executeMethod APKBuild.Build -logFile build.log
参数介绍
H:\Unity\Unity\Editor\Unity.exe 为Unity 安装执行文件 -projectPath 执行Unity游戏工程 G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo 为Unity 工程目录 Assets 上一层目录 -quit 表示执行结束自动退出 -executeMethod 表示执行 编辑器方法 APKBuild.Build APKBuild 为编辑器脚本 APKBuild.cs , 中APKBuild.cs Build 函数名
最终 Unity.bat 脚本
@echo off echo 正在生成APK文件... REM H:\Unity\Unity\Editor\Unity.exe -projectPath G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo -quit -batchmode -executeMethod APKBuild.Build -logFile build.log %1 -projectPath %2 -quit -batchmode -executeMethod APKBuild.Build -logFile build.log echo APK文件生成完毕! pause
上面 %1 %2 我通过在执行批处理脚本的时候将参数传递进来
将 Unity.bat 放在 Unity 项目根目录(和 Assets 同级)
将Unity 工程上传到 SVN服务器
开始Jenkins
新建一个新工程下一步弹出配置界面
源码管理
中选择 SubVersion 配置SVN 路径和用户名密码
点击 Add 添加一个用户名和密码
Check -out Strategy 中配置每次构建时执行的 SVN update命令(每次构建时会将SVN 中最新的项目更新到 Jenkins 的工作空间WORKSPACE)
如我本地的Jenkins 工作空间位置,Jenkins新建的项目都会放在 workspace 下
C:\Users\Dev\.jenkins\workspace\
构建中选择 Windows 批处理,
第一行打印一个 HelloWorld
第二行执行 Unity.bat 后边两个参数 分别传递给批处理中 %1,%2%WORKSPACE% 是Jenkins 中可用的环境变量,表示该项目在Jnekins 中的目录位置 本项目在Jenkins 为 TestDemo则 %WORKSPACE% 在我本地为 C:\Users\Dev\.jenkins\workspace\TestDemo
配置完成保存,执行构建(构建时要将 Unity 关掉)
可以查看日志
等待构建
构建完成后打开工作空间,发现目录下生成一个 Test.apk 表示 APK 生成成功下面来看下我的 Unity 工程和 Jenkins 工程的关系
Unity Demo工程目录如下
Unity Demo工程上传到 SVN 服务器
在 Jenkins 中新建TestDemo项目,在 TestDemo配置中 添加 Demo工程上传的 SVN 服务器路径
Jenkins 在构建构建时会从 SVN 服务器将 Demo 工程 CheckOut 到 Jenkins 的工作空间中 TestDemo 项目下
打开 TestDmeo 文件夹,我已经执行过构建了, Jenkins 已经从 SVN 上更新了最新的项目到 工作空间中
然后我在执行 Unity.bat 时,将
%WORKSPACE%
在我本地为(C:\Users\Dev.jenkins\workspace\TestDemo)传递了进去,即执行的 打包工程是Jenkins 工作空间的这个工程每次修改Unity Demo 工程,将修改提交到 SVN,然后再执行 Jenkins 构建
-
关于安卓(apk)unity3d游戏汉化简单做一些全面分析-附件资源
2021-03-05 15:17:28关于安卓(apk)unity3d游戏汉化简单做一些全面分析-附件资源 -
Unity导出APK报错
2021-01-21 13:41:16CommandInvokationFailure: Failed to build apk.Unity导出APK报错 原因1.jdk版本太高,一般使用角度看1.8 原因2.密匙出错 报错: CommandInvokationFailure: Failed to build apk. C:/Program Files/Java/jdk1.8.0_... -
Unity Android APK Remote5
2019-01-29 11:12:27Unity Android APK 最新 Remote5 免打包成apk的麻烦直接在电脑端看调试结果 -
Unity+讯飞apk
2016-08-19 16:55:20讯飞语音结合Unity开发的简单实例,之前上传过工程,这次上传apk,可以先试试 -
利用安卓apk找到unity制作的包名
2019-10-22 10:39:46首先,找到unity中安卓SDK的路径,在SDK中打开E:\AndroidSDK\build-tools\29.0.2路径,在这个文件夹中的空白处单击shift+鼠标右键,选择打开Powershell窗口 然后在窗口中可以看到类似这样的路径 在路径后面... -
Unity 里调用apk
2021-04-08 15:19:31Unity 里调用apk //传入一个包名 private void openPackage(string packageName) { using (AndroidJavaClass jcPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject ... -
反编译apk获取unity资源流程分享
2019-10-22 11:12:47看到其他做的很好的游戏,看到很好的图或者模型,想破解里面的资源拿来自己用,如果没加密的话就可以破解出来(如轩辕传奇的apk就没加密,从里面能搞出很多好看的图片和模型) 想学习研究别人的游戏是怎样处... -
Unity 导出apk
2019-01-22 16:49:011.保存你的Scenes ... ... 4....(应该有自带安卓SDK吧我也记不到了,如果行不通的话自己去百度怎么配置android SDK,还挺...选定导出的目录并给apk命名后点击保存,等待1分钟左右就可以看到导出的apk文件啦~ -
Unity自动打包 apk
2018-12-10 10:45:42Unity打包 apk,会把Unity安装目录下的默认 AndroidManifest.Xml 文件覆盖到apk中去,同时还会拷贝该文件所在目录下的其它默认设置文件,如 res 和 assets 文件夹。 AndroidManifest.Xml 主要是用来设置一些... -
unity打包APK报错
2020-04-23 15:09:31Unity打APK,总是弹出下面的提示框 可是在Android studio中我已经把SDK更新了, 不管了,统统点了Use Hightest Installed按钮,结果打包报错了 网上搜了一堆办法都不行,无意中看到了SDK的路径,unity里写的是SDK的... -
Unity打包apk报错
2018-04-19 10:59:41【1】打包apk出错 CommandInvokationFailure: Failed to build apk. D:/Java/jdk-9.0.4\bin\java.exe -Xmx2048M ...开发环境:Unity5.4.2f2 jdk9.0.4 解决方案:更改jdk版本为jdk-8u172-windows-x64 ... -
unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)
2021-01-04 08:04:20unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk),总的流程分为以下6个步骤: 1、安装java_jdk 2、配置java环境变量 3、更新android的sdk 4、从Unity3d中发布出apk文件 5、创建android虚拟机... -
apk提取加密素材_从apk包中提取unity资源
2021-01-14 15:30:42这里有两种方式,一种是修改apk包后缀为zip然后解压,不过这样似乎会让xml文件呈现乱码显示,如果希望看到xml文件的就不建议这样了,但是如果只想提取资源的话应该不会受到影响。另一种是使用apk反编译工具。这种... -
反编译 Unity发布Apk
2017-09-26 11:42:53转自:http://www.cnblogs.com/U-tansuo/p/unity3d_apk_decompilation.html 郑重声明:本教程仅用于学习使用,从事任何商业用途非法行为与作者无关,请知晓! 本文目的:通过教会大家如何破解别人游戏的同时,也... -
Unity 发布APK报错
2020-05-07 19:59:44问题1: Build Gradle错误 CommandInvokationFailure: Gradle build ...D:/JAVASDK/jdk1.8.0_251\bin\java.exe -classpath "F:\Unity2018\install\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\l...