mmf爱好者吧 关注:205贴子:2,033
  • 10回复贴,共1

[转自永远的玛丽吧]教大家把MMF2工程导出为安卓应用apk

只看楼主收藏回复

首先我们需要进行环境的配置。环境配置只需要进行一次
(不要信官网上说的必须装JDK1.6一类的,那消息早就过时了)
我们需要安装两样东西


第一样东西是JDK1.8(或者更新的版本,如果有)
到这里下载http://www.oracle.com/technetwork/java/javase/downloads/index.html
点Java Platform (JDK) 上面的Download进入下一个页面
在最上面一项,先点Accept License Agreement,然后找到Windows x86一项右面的地址,右键迅雷下载(不用迅雷的话会提示你注册帐号 很烦= =)
【就算你系统是64位的也一定要装x86版本的,别给我自作聪明的去安装x64】






第二样东西是Android SDK
【如果你在国内,请全程翻墙,别问我怎么翻】
首先打开这个页面http://developer.android.com/sdk/index.html
拉到【最底下】,找到SDK Tools Only,下载Windows installer 并安装



然后运行刚刚安装的程序
它会拉取可用的下载列表,并自动为你勾选很多项
且慢——我们【点Deselect All】全部取消勾选(否则有你下的。。。默认勾选的包括开发文档、虚拟机等等庞然大物)
只要勾选【括号里API数字最大的一项】里面的SDK Platform就行了

勾选后点右下角的Install Package(我忘圈出来了),然后点Accept License,然后点Install



等这个安装完成你的环境就配置好了


回复
1楼2015-04-11 17:57
    接下来说明如何把具体工程导出为安卓应用。
    在场景列表中点击游戏标题
    在属性第一个选项卡里的Build Type里选择Android/OUYA Application


    如果没有这个选项,说明你没有安装Android Exporter,我提供的MMF2.5下载地址中包含了一个Android Exporter.7z,把它下载下来解压到MMF2.5安装目录下即可。


    然后我们切换到最后一个(小绿人)选项卡
    这里我提一下有必要更改的位置,其余地方不用管
    【首先是Package Name】,我们要把它改成自己的名字
    这个名字是安卓系统用来区分不同的应用的,不是显示名称
    包名形如"aaa.bbb.ccc"这样,包含三个部分,每部分之间用点分隔,一定要按格式填写否则会报错。
    具体内容可以随便写,只要不和其他应用的重复就行。
    【然后是Build API】,默认是14,我们【必须】把它修改为刚刚下载的版本(比如我下载的是API 22,就改成22)
    下面的两个选项分别是允许最低的系统版本和推荐的系统版本
    如果希望限制你的应用不能在低于某版本的安卓上运行,可以更改Minimum那项。

    然后向下拉,找到Release Options
    这里是设置应用签名的,我们平时制作时可以不用管它,取消勾选就行了,但是注意两点:
    【如果不设置,apk生成一年后签名会失效,无法安装】
    【如果不设置,不能提交到Google Play商店】
    怎么设置别问我,我不会



    然后是这里
    Screen orientation默认是Portrait(竖屏),我们的游戏一般都是Landscape(横屏),所以别忘了改这个
    Display是设置如何处理分辨率不同的
    默认的是Fit Inside,这种模式会按比例拉伸到填满屏幕
    其他的模式有:
    Center:在中间显示一个小窗口
    Adjust Window Size:调整应用的实际分辨率,就是把原本在屏幕外的东西显示进去
    Fit inside and adjust window size:先按比例拉伸到填满屏幕,然后调整分辨率,比较完美的解决方案,唯一让我郁闷的是它不是居中显示而是靠左显示了
    Fit outside:我还没试,大家可以试试(喂)
    Stretch to fill:拉伸显示


    Options menu是按下安卓的菜单键时显示的菜单
    Launch Icon是应用的图标

    Version info:应用版本,安装了应用的旧版本后只能覆盖安装更新或者相同的版本,不能安装更旧的版本
    Permissions是应用用到的系统权限,得看具体情况选择

    把该设置的都设置完成后就可以编译了
    编译方法和以往一样,但会用掉很长时间(毕竟JAVA。。。)所以我建议大家在开发过程中还是编译成Win32程序在电脑上测试……
    如果出现了如图所示的对话框,说明场景里出现了与安卓不兼容的事件。点击否可以查看详情。
    (像我的只是有个隐藏鼠标指针,这种就可以放心点是来忽略,如果是重要的事件那就重写吧……)
    编译完成后会得到一个apk文件,就可以装到手机上了

    前面有两点忘说了
    一是包名一旦决定了就不要更改了,如果更改的话不会覆盖安装以前的版本,就是说系统会认为它是两个不同的应用来分别安装
    二是关于应用签名,不设置签名的话,如果你把相同的工程拿到另一台电脑上编译再安装,那么就会提示签名冲突无法安装……






    在优酷找到了一个mmf2.5导出安卓。apk格式的教程视频,分享给大家……
    视频来自:优酷


    回复
    2楼2015-04-11 18:00
      这个视频是雪落忆海制作的吧,我感觉怎么这么像呢,以前他好像还录过天上掉馅饼的视频~~~~


      收起回复
      3楼2015-04-11 18:27
        哦,感谢雪落忆海辛苦录制


        回复
        4楼2015-04-11 18:41
          卤煮在吗? 我之前拿1.5demo做的文件 之后拷贝到其他电脑上 下载了2.5 demo 但是打不开文件 提示需要kcpict.mfx文件 怎么办?


          收起回复
          6楼2015-11-04 21:23
            刚进吧,求问楼主的mmf的那个连接在哪里呀?


            收起回复
            7楼2016-05-27 20:31
              Buildfile: C:\Users\JXX\AppData\Local\Temp\And165D.tmp\build.xml


              -set-mode-check:


              -set-debug-files:


              -check-env:
              [checkenv] Android SDK Tools Revision 25.2.5
              [checkenv] Installed at D:\Users\JXX\AppData\Local\Android\sdk


              -setup:
              [echo] Project Name: RuntimeAndroid
              [gettype] Project Type: Application


              -set-debug-mode:


              -debug-obfuscation-check:


              -pre-build:


              -build-setup:
              [getbuildtools] Using latest Build Tools: 25.0.2
              [echo] Resolving Build Target for RuntimeAndroid...
              [gettarget] Project Target: Android 7.1.1
              [gettarget] API level: 25
              [echo] ----------
              [echo] Creating output directories if needed...
              [mkdir] Created dir: C:\Users\JXX\AppData\Local\Temp\And165D.tmp\bin
              [mkdir] Created dir: C:\Users\JXX\AppData\Local\Temp\And165D.tmp\bin\res
              [mkdir] Created dir: C:\Users\JXX\AppData\Local\Temp\And165D.tmp\bin\rsObj
              [mkdir] Created dir: C:\Users\JXX\AppData\Local\Temp\And165D.tmp\bin\rsLibs
              [mkdir] Created dir: C:\Users\JXX\AppData\Local\Temp\And165D.tmp\gen
              [mkdir] Created dir: C:\Users\JXX\AppData\Local\Temp\And165D.tmp\bin\classes
              [mkdir] Created dir: C:\Users\JXX\AppData\Local\Temp\And165D.tmp\bin\dexedLibs
              [echo] ----------
              [echo] Resolving Dependencies for RuntimeAndroid...
              [dependency] Library dependencies:
              [dependency] No Libraries
              [dependency]
              [dependency] ------------------
              [echo] ----------
              [echo] Building Libraries with 'debug'...
              [subant] No sub-builds to iterate on


              -code-gen:
              [mergemanifest] Merging AndroidManifest files into one.
              [mergemanifest] Manifest merger disabled. Using project manifest only.
              [echo] Handling aidl files...
              [aidl] No AIDL files to compile.
              [echo] ----------
              [echo] Handling RenderScript files...
              [echo] ----------
              [echo] Handling Resources...
              [aapt] Generating resource IDs...
              [echo] ----------
              [echo] Handling BuildConfig class...
              [buildconfig] Generating BuildConfig class.


              -pre-compile:


              回复
              9楼2017-02-20 15:09
                -compile:
                [javac] Compiling 380 source files to C:\Users\JXX\AppData\Local\Temp\And165D.tmp\bin\classes
                [javac] 警告: [options] 源值1.5已过时, 将在未来所有发行版中删除
                [javac] 警告: [options] 目标值1.5已过时, 将在未来所有发行版中删除
                [javac] 警告: [options] 要隐藏有关已过时选项的警告, 请使用 -Xlint:-options。
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:24: 错误: 程序包org.apache.http不存在
                [javac] import org.apache.http.HttpResponse;
                [javac] ^
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:25: 错误: 程序包org.apache.http不存在
                [javac] import org.apache.http.NameValuePair;
                [javac] ^
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:26: 错误: 程序包org.apache.http.client.entity不存在
                [javac] import org.apache.http.client.entity.UrlEncodedFormEntity;
                [javac] ^
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:27: 错误: 程序包org.apache.http.client.methods不存在
                [javac] import org.apache.http.client.methods.HttpPost;
                [javac] ^
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:28: 错误: 程序包org.apache.http.impl.client不存在
                [javac] import org.apache.http.impl.client.DefaultHttpClient;
                [javac] ^
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:30: 错误: 找不到符号
                [javac] import org.apache.http.params.HttpProtocolParams;
                [javac] ^
                [javac] 符号: 类 HttpProtocolParams
                [javac] 位置: 程序包 org.apache.http.params
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:63: 错误: 找不到符号
                [javac] ArrayList <NameValuePair> postData = new ArrayList <NameValuePair> ();
                [javac] ^
                [javac] 符号: 类 NameValuePair
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:63: 错误: 找不到符号
                [javac] ArrayList <NameValuePair> postData = new ArrayList <NameValuePair> ();
                [javac] ^
                [javac] 符号: 类 NameValuePair
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:65: 错误: 找不到符号
                [javac] postData.add(new NameValuePair()
                [javac] ^
                [javac] 符号: 类 NameValuePair
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:95: 错误: 找不到符号
                [javac] HttpPost post = new HttpPost ("http://bugs.clickteam.com/report.php");
                [javac] ^
                [javac] 符号: 类 HttpPost
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:95: 错误: 找不到符号
                [javac] HttpPost post = new HttpPost ("http://bugs.clickteam.com/report.php");
                [javac] ^
                [javac] 符号: 类 HttpPost
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:99: 错误: 找不到符号
                [javac] { post.setEntity (new UrlEncodedFormEntity (postData));
                [javac] ^
                [javac] 符号: 类 UrlEncodedFormEntity
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:105: 错误: 找不到符号
                [javac] DefaultHttpClient client = new DefaultHttpClient();
                [javac] ^
                [javac] 符号: 类 DefaultHttpClient
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:105: 错误: 找不到符号
                [javac] DefaultHttpClient client = new DefaultHttpClient();
                [javac] ^
                [javac] 符号: 类 DefaultHttpClient
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:108: 错误: 找不到符号
                [javac] HttpProtocolParams.setUseExpectContinue (params, false);
                [javac] ^
                [javac] 符号: 变量 HttpProtocolParams
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\CrashReporter.java:111: 错误: 找不到符号
                [javac] HttpResponse response;
                [javac] ^
                [javac] 符号: 类 HttpResponse
                [javac] 位置: 类 CrashReporter
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\MMFRuntime.java:1645: 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
                [javac] Method m = c.getDeclaredMethod("disconnect", null);
                [javac] ^
                [javac] 对于 varargs 调用, 应使用 Class<?>
                [javac] 对于非 varargs 调用, 应使用 Class<?>[], 这样也可以抑制此警告
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\MMFRuntime.java:1646: 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
                [javac] Object o = m.invoke(null, null);
                [javac] ^
                [javac] 对于 varargs 调用, 应使用 Object
                [javac] 对于非 varargs 调用, 应使用 Object[], 这样也可以抑制此警告
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\MMFRuntime.java:1660: 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
                [javac] Method m = c.getDeclaredMethod("connect", null);
                [javac] ^
                [javac] 对于 varargs 调用, 应使用 Class<?>
                [javac] 对于非 varargs 调用, 应使用 Class<?>[], 这样也可以抑制此警告
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\MMFRuntime.java:1661: 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
                [javac] Object o = m.invoke(null, null);
                [javac] ^
                [javac] 对于 varargs 调用, 应使用 Object
                [javac] 对于非 varargs 调用, 应使用 Object[], 这样也可以抑制此警告
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\MMFRuntime.java:1675: 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
                [javac] Method m = c.getDeclaredMethod("isConnected", null);
                [javac] ^
                [javac] 对于 varargs 调用, 应使用 Class<?>
                [javac] 对于非 varargs 调用, 应使用 Class<?>[], 这样也可以抑制此警告
                [javac] C:\Users\JXX\AppData\Local\Temp\And165D.tmp\src\Runtime\MMFRuntime.java:1676: 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
                [javac] Object o = m.invoke(null, null);
                [javac] ^
                [javac] 对于 varargs 调用, 应使用 Object
                [javac] 对于非 varargs 调用, 应使用 Object[], 这样也可以抑制此警告
                [javac] 注: 某些输入文件使用或覆盖了已过时的 API。
                [javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
                [javac] 注: 某些输入文件使用了未经检查或不安全的操作。
                [javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
                [javac] 16 个错误
                [javac] 9 个警告


                BUILD FAILED
                D:\Users\JXX\AppData\Local\Android\sdk\tools\ant\build.xml:716: The following error occurred while executing this line:
                D:\Users\JXX\AppData\Local\Android\sdk\tools\ant\build.xml:730: Compile failed; see the compiler error output for details.


                Total time: 4 seconds


                回复
                10楼2017-02-20 15:10
                  大神能帮忙看看这是什么意思吗? 完全按照教程做的。。。只不过把JAVA和AndroidSDK都安装到D盘了。。。


                  回复
                  11楼2017-02-20 15:11