unity3d怎么发布成.apk

unity3d怎么发布成.apk,第1张

第一步
1, 在unity的菜单栏中,Edit->preferences->External Tools->Android SDK Location中设置sdk的路径(类似adt-bundle-windows-x86的路径)
第二步
1, 在unity的菜单栏中,File->Build Settings中,Add Current添加要打包发布的unity关卡
2, 在Platform中点击Switch Platform选取Android那一栏
3, 点击Player Settings,点击anroid图标的那一列,修改Other Settings中的Minimum API Level为你手机的安卓版本(不能高于手机的安卓版本)

1可能你的虚拟机是低版本安卓系统的,但你生成的是高版本的 2用户设置里一定要把产品名(product name)改成其他默认的就出错 3安卓设置android setting里mininum api level 选最低api吧(android 201),这样任何虚拟机都可以用 我用过android 22的虚拟机在u3d 35没问题

确保你的Unity是用官方的下载器安装的,就是 DownloadAssistant 那个exe文件,否则就得自己装安卓的build support。
确保在Unity首选项里设置了安卓的SDK地址,当然,配置安卓SDK需要X墙,毕竟谷歌家的。
build setting里选安卓,点build就完事。

1Android端代码可以在Eclipse中开发(AndroidStudio没有试,应该也可以)
2Unity3D端代码要在Unity中开发
3Android和Unity3D端,两边都需要加入一些代码从而可以使之关联交互。
4将Android端代码编译成jar文件以插件形式放入到Unity端中
5在Unity中将整个项目Build成apk文件,然后安装到手机或模拟器里运行
本文主要讲解1,2,3。对于4,5建议大家去看雨松MOMO的Unity博客的第17篇和第18篇。
UnityPlay:
在编写Android端和Unity3d端代码前,有必要先了解一下可以使两部分交互的类UnityPlay。
个人理解UnityPlay是个Unity提供给外部交互的一个接口类。
为什么是“个人理解”?这我不得不爆粗口了,TMD官网根本就没有相关的API和文档(如果大家有谁找到一定给我来一份,就当我骂自己了)。
在关联Android时,想拿到UnityPlay以及相关类的jar包可以从下面的地址找到:Unity安装路径\Editor\Data\PlaybackEngines\androidplayer\bin在bin文件夹下有一个classesjar的jar文件,它就是我们想要的。
而在bin同目录下有一个src文件,点击到最后有3个类,分别是UnityPlayerActivityjava,UnityPlayerProxyActivityjava,UnityPlayerNativeActivityjava。前两个打开个后只有一行代码,说的是UnityPlayerActivity和UnityPlayerProxyActivity都继承自UnityPlayerNativeActivity。而打开UnityPlayerNativeActivity中居然有代码,而且我估计这应该是UnityPlayerNativeActivity的源码。
由于关于UnityPlay的资料我只找到这么一个,所以我把UnityPlayerNativeActivity中的代码都贴出来,如果我注解有不对的地方希望大家指正。
/
UnityPlayerActivity,UnityPlayerProxyActivity都继承自UnityPlayerNativeActivity
而UnityPlayerNativeActivity继承自NativeActivity
在该类里定义了一些和ANDROID生命周期相同的回调方法,留给自定义的Activity子类重写。
/
public class UnityPlayerNativeActivity extends NativeActivity
{
//UnityPlayer的引用,并且我们不能改变这个引用变量的名字,它被native code所引用
protected UnityPlayer mUnityPlayer;
protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(WindowFEATURE_NO_TITLE);
superonCreate(savedInstanceState);
// 设置显示窗口参数
getWindow()takeSurface(null);
setTheme(androidRstyleTheme_NoTitleBar_Fullscreen);
getWindow()setFormat(PixelFormatRGB_565);
// 创建一个UnityPlayer对象,并赋值给全局的引用变量
mUnityPlayer = new UnityPlayer(this);
//为UnityPlayer设置一些参数
if (mUnityPlayergetSettings ()getBoolean ("hide_status_bar", true))
getWindow ()setFlags (WindowManagerLayoutParamsFLAG_FULLSCREEN,
WindowManagerLayoutParamsFLAG_FULLSCREEN);
int glesMode = mUnityPlayergetSettings()getInt("gles_mode", 1);
boolean trueColor8888 = false;
// UnityPlayerinit()方法需要在将view附加到layout之前调用。它将会调用native code
mUnityPlayerinit(glesMode, trueColor8888);
// 从UnityPlayer中获取到Unity的View视图
View playerView = mUnityPlayergetView();
// 将Unity视图加载到根视图上
setContentView(playerView);
// 使Unity视图获取焦点
playerViewrequestFocus();
}
protected void onDestroy ()
{
// 当Activity结束的时候调用UnityPlayerquit()方法,它会卸载之前调用的native code
mUnityPlayerquit();
superonDestroy();
}
// 下面几个方法都是ANDROID相关回调方法,确保在ANDROID执行相应方法时UnityPlayer也需调用相应方法
protected void onPause()
{
superonPause();
mUnityPlayerpause();
}
protected void onResume()
{
superonResume();
mUnityPlayerresume();
}
public void onConfigurationChanged(Configuration newConfig)
{
superonConfigurationChanged(newConfig);
mUnityPlayerconfigurationChanged(newConfig);
}
public void onWindowFocusChanged(boolean hasFocus)
{
superonWindowFocusChanged(hasFocus);
mUnityPlayerwindowFocusChanged(hasFocus);
}
public boolean dispatchKeyEvent(KeyEvent event)
{
if (eventgetAction() == KeyEventACTION_MULTIPLE)
return mUnityPlayeronKeyMultiple(eventgetKeyCode(), eventgetRepeatCount(), event);
return superdispatchKeyEvent(event);
}
}

1首先呢。就是必要的一些软件工具了。 不用说unity3d这个是必要的(觉得这是不是废话)。然后就是。我们的一些运行的环境了。 Java(jdk) Android模拟器(sdk)[当然你有真机也可以]。这些你可以从网上下载。
在这里我给大家提供一个 Android模拟器(sdk)的下载地址 Java(jdk)就不提供了吧。度娘一下就出来了。Unity3d
就更不用说了吧(诶。还是有点废话)。呵呵。
2 安装
一.Java的安装。
这个非常简单。打开你下载好的选择个路径安装就可以了。
在个就是环境配置。右击我的电脑-属性-高级-环境变量-新建三个路径(变量名有的话直接在上面 *** 作就可以了)。
1变量名JAVA_HOME
变量值C:\Program Files\Java\jdk170_03 (这个可能没有你必须新建。
注意:C:\Program Files\Java\jdk170_03这是我的。你的可能是D:\,,E:\)
这是我的java路径
2变量名CLASSPATH
变量值
;%JAVA_HOME%\lib\toolsjar;%JAVA_HOME%\lib\dtjar;%JAVA_HOME%\bin;C:\Program
Files\Java\jdk170_03\jre\lib\ext\QTJavazip
3变量名Path 变量值C:\Program Files\Java\jdk170_03\bin( 这个可能先前已经有了。这段路径你放在前后都无所谓。如果你放在后面C:\前面要有个分号隔开。如果有了就不用了。)
注意。这上面都是我个人的。你要清楚你的java安装路径。
二.Android模拟器(sdk)的安装。
这个非常简单。你下载下来后。直接解压就可以了。解压以后就是这样的。
别忘了。这个也需要 环境设置。将你的模拟器platform-tools文件夹路径添加到上面讲的Path
变量值下。我的是G:\adt-bundle-windows-x86\platform-tools
可以点击sdk Managerexe
里面已经有我下载安装好的Android版本,233 30 31(所以你下载的才那么大600多M)。
如果你需要更高的版本。可以运行更新你想要的更多版本。
好。这个就先放这。让后点击AVD Managerexe
运行以后。出现这个界面。
划红线的是我已经新建好的不同的Android版本。别担心。一会你的也会有的。
你要做的是。点击右边的new按钮。
出现下面的界面。
填写好你的AVDname 这个可以任意。
再选择Device。这是设置屏幕大小的。你可以选择一个都可以。
在个就是。Target 点击下拉箭头。看到没有。;里面的内容就是你安装的各个Android版本。你可以选择自己需要的。
最后别忘了。SD Card选择大小。好了。点击OK。再ok
看到没有。你的AVD界面。是不是已经有了一个Android版本了?你可以多建几个版本。
选择一个Android版本。点击右下角的Start接着继续点击Launch。等一会。
真机(虚拟机)就出来了。大功告成。哈哈哈哈。
好吧。现在环境已经配置完成了
3发布apk

打开你的unity3d 至于你要发布什么。做的是什么。我们在这里就不说了吧。我们现在只讨论发布过程。
假如你应经做好了东西。准备发布。那就开始吧。
首先。设置一下你的模拟器路径。点击菜单栏中的Edit-Preferences
看Android SDK Location这个选项 浏览你的模拟器路径。
我的是
这个设置完成后。我们继续。
点击 File-Build Settings
然后再 点击Add Current 添加你的场景。再 点击Switch platform 确保你的那个unity小图标在Android一行, 再点击Play Settings
要注意的是划红线的部分。如果你原先没设置。第一个红线出你的应该是comCompanyProductname 记住要把Company改成别的。只要不是Company就可以了。不让发布不了。
另外就是第二个划红线处。这是选择你要发布的apk文件的运行环境。也是最低环境。这里我们选择23 每一个unity版本都有一个发布最低版本的限制。我这个已经是最低限制了。
更高的unity版本发布的最低Android系统版本限制也就会越高。
特别要注意的是。你发布的Android版本如果你的模拟器里面没有这个版本的。那就会出现发布错误。还有就是假如说你发布了一个30的版本。你的模拟器里只有一个很高的40的版本。那也是会发布错误的。所以这一点要特别的注意。我原来就只在这里碰壁的。
好了。这个设置完就可以真的发布了。点击Build按钮。就可以发布出apk文件了。
最后教大家一下发布的apk文件怎么安装。
这个就简单了。
把你的apk文件放在D盘的根目录下(你也可以放在别的盘根目录下。因为我的除了C盘只有D盘了。郁闷啊)。
为什么要放在盘的根目录下呢?。这是为了安装方便。下面你就知道了。
然后打开:“命令提示符”
你也可以点击 开始-运行 输入cmd 也可以打开命令提示符。
你打开命令提示附后。 在上面输入 D:回车(这样就是在d根目录下找到你的apk文件。如果你放在更深的文件里。那就很麻烦了。)
然后在输入
adb install xxxapk 回车(xxx是你apk文件的文件名)
你就会看到。 他正在安装。
注意的是。安装以前你的Android虚拟机要运行这。

1、首先将Unity创建一个Android工程,例如我的工程名是:01_Unity_Message,如下是Project视图下的目录。
2、新建库模块——Android工程是由模块组成的,每一个模块可以创建一个应用,切换到Android视图下可以看到每一个模块。因为Unity与Android通信主要是调用了各自的方法,因此在Android工程中我们可以单独新建一个模块作为库模块,来负责与Unity的交互内容。
新建模块 *** 作:
点击Finish按钮,然后稍等片刻,就会创建出新的模块,我们作为一个库模块来使用,如下图:
3、将Unity的jar包(classjar)导入到新建的库模块中,首先说明:
首先找到classjar文件,它的路径在Unity的安装路径下,例如我的是在:D:\Program Files (x86)\Unity536\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes,然后会发现只有一个classjar文件。
这里注意两点:
(1)、这个路径是新版的Unity下的路径,以前版本的jar文件是在\Unity536\Editor\Data\PlaybackEngines\AndroidPlayer\Release\下;
(2)、Unity路径下有两个classjar文件的不同路径,一个是在Unity536\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下,另一个是在D:\Program Files (x86)\Unity536\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes下。Unity中我们使用的是C#脚本,最终运行在Android上是由于Mono进行转换的,所以我们选用的jar文件是第一个路径下的。如果使用的是il2cpp,就要选择第二个路径下的jar文件。
将jar包导入库模块的 *** 作如下:
4、因为新建的库模块中没有MainActivityjava,我们可以理解为启动这个模块的java类,例如在初始的app模块中就有一个MainActivityjava。因此需要新建一个MainActivityjava的文件,并且调用Unity包中的基类,具体 *** 作如下:
点击Finish后,会在库模块的中创建出一个MainActivity的类
注意:生成MainActivity类后,会在res/layout下生成一个xml文件:main_layoutxml。这个文件是一个布局文件,
因为我们的库模块是为了跟Unity交互的,不需要界面布局,所以为了防止后面发生错误,这里删除掉这个文件
注意:要修改AndroidMainfestxml文件,
然后仿照初始的app模块中的AndroidMainfestxml文件,将里面的<activity></activity>部分复制到库模块的AndroidMainfestxml的相同位置。
然后需要修改一下MainActivity这个脚本
5、下面就是在Android中编写Unity要调用的方法了,例如我这里只写一个简单的两数求和的方法:
6、Build库模块,然后将生成的配置文件导入到Unity工程中, *** 作如下:
然后稍等片刻,编译中
然后在Project视图下,找到编译生成文件的所在目录unity_exchange/build/intermediates/bundles/debug,右键后打开所在文件夹
然后把debug文件夹下的classesjar文件移动到libs文件夹中,并且把libs文件夹中的classjar文件替换掉。然后将debug文件夹下的libs文件夹、res文件夹、AndroidManifestxml文件导入到Unity的Assets/Plugins/Android文件夹下(没有这个文件夹需先创建)。
然后将三个文件移动到Unity的plugins/Android文件夹下。
7、创建Unity的C#脚本,并挂载到MainCanera上。为了在真机测试时能够看到求和的结果,这里我使用的是UGUI的Text来显示结果,同时通过Button的按钮来触发求和方法。如下图。
以下是主要的脚本代码。调用Android中的方法,并将求和结果显示在(Text)界面上
将脚本挂载到MainCamera上
8、Unity编辑器不能运行与Android相关的 *** 作,所以需要导出apk文件到真机上测试。
注意:导出前要修改PlayerSettings相关配置。因为从Android工程中导入了一个AndroidManifest文件,这个文件中有Android工程的相关配置,例如工程名称、工程的包名、最低SDK版本、执行的Activity等等。因此我们要在Unity导出apk前修改一些相关配置,主要修改的是包名
最后是导出apk包到手机上或虚拟机上测试即可。
特别提醒:如果使用Android工程中初始的app模块来与Unity交互,需要修改部分配置。buildgradle文件中,将applicationId删除,然后将apply plugin后面的内容修改为"comandroidlibrary"。
不建议大家使用初始的app模块,而是新建一个专门作为交互的Library模块。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13366183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存