开源刺客引擎二开教程(三)-35博客圈 开源刺客引擎二开教程(三) - 35博客圈
手游教程 手游教程 关注:232 内容:1152

开源刺客引擎二开教程(三)

  • 查看作者
  • 打赏作者
  • 当前位置: 35博客圈 > 手游交流 > 手游教程 > 正文
    • 手游教程
    • LV12
      vip3
      admin

      用Android Studio编译打开Android APK

      1、首先我们需要准备一些工具和环境,安装Android Studio,为了和我的环境保持一致,建议安装4x以上版本,最新版本最优。

      由于原始的刺客里面的Android Studio工程比较旧了,不建议在那个基础上进行开发了,当然你有一定的Android基础可以改造。

      最新Android Studio空工程和全部准备好的工具包(下载地址在最底部)。空工程的意思是全套可编译环境,不包含游戏源码,源码你还是用你自己的。

      包含Android Studio空工程,Android SDK NDK  JDK 如下图:

      开源刺客引擎二开教程(三)

      2、你的Android Studio工程结构应该是如下图这样的

      开源刺客引擎二开教程(三)

      打开这个目录Clientproj.android-studioappsrcmainassets 你能看到游戏的资源目录,之前我们用Cocos Studio打包的资源在Resources目录内,我们可以手动将Resources内的文件拷贝到assets目录下。

      开源刺客引擎二开教程(三)

      3、对于一个项目来说,有了资源还有有源代码才能运行,源代码之前我们是用VS2017进行修改的,是C++的代码,源代码所在的目录是

      开源刺客引擎二开教程(三)

      这是我们游戏的客户端源代码,打包Android安装包,当然也要编译这些C++代码,在Android中,需要将这些代码编译成后缀为so的库文件,Android才能加载运行,如下图:

      开源刺客引擎二开教程(三)

      也就是说这些C++代码编译成功后就是这些so文件。

      4、先看下编译引用目录的问题,Android想要编译这些文件全部依赖于工程中的一个编译文件,就是Android.mk,这个文件里面包含了要编译的文件的位置,你要根据你的文件放置的位置进行修改。

      开源刺客引擎二开教程(三)

      需要找到这些C++文件才知道要编译哪些文件,你可以按照我的结构进行放置,这样就不用修改编译文件了。

      开源刺客引擎二开教程(三)

      上图这4个文件是打包必须的,一个都不能少。

      5、NDK配置,以及其他环境变量

      先做一个一键配置环境变量的脚本,这样方便。

      新建一个txt文件,复制内容后,修改后缀为bat。记得路径改成你自己的。

      包含的环境有jdk1.7,ndk-r10d,android sdk  cocos

      @echo off
      setx /M JAVA_HOME E:projecttoolsjdk1.7
      setx /M CLASSPATH %JAVA_HOME%lib;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar
      setx /M NDK_ROOT E:projecttoolsandroid-ndk-r10d
      setx /M ANDROID_SDK_ROOT E:projecttoolssdk
      setx /M ANT_ROOT E:projecttoolsant1.9.2
      setx /M NDK_MODULE_PATH E:projectymcqClientcocos2dcocos
      set path_=%Path%
      setx /M "Path" "%path_%;%JAVA_HOME%bin;%JAVA_HOME%jrebin;%ANDROID_SDK_ROOT%sdkplatform-tools;%ANDROID_SDK_ROOT%sdktools;%ANT_ROOT%bin"
      pause

      你可以像我这样,红箭头的是这个游戏需要的。

      开源刺客引擎二开教程(三)

      电脑上的环境变量配置好后,Android Studio的也检查一下,找到local.properties文件。

      开源刺客引擎二开教程(三)

      6、一些都准备好了,就开始编译吧,点击Android Studio 底部的终端Terminal,进入到工程的jni目录。

      开源刺客引擎二开教程(三)

      输入ndk-build -j4  回车, 开始编译,其中-j4 表示我电脑是4核,如果你电脑是8核,你就用-j8 这样编译速度后大幅提升。

      清楚缓存命令 ndk-build clean

      开源刺客引擎二开教程(三)

      6、如果代码没问题,编译完成后,你就能看到新编译的so文件了,之后运行和打包,你可以直接用数据线连接电脑,手机打开开发者模式,可以直接运行到手机

      开源刺客引擎二开教程(三)

      客户端源码编译时如果错误:Class/tools/CharsetConvert
      修改代码:增加const
      size_t ret = iconv(cd, (const char**)&tmpin, inlen, &tmpout, outlen);

      你也可以打包成apk文件安装,打包后的安装文件位置:proj.android-studioappbuildoutputsapkrelease

      开源刺客引擎二开教程(三) 开源刺客引擎二开教程(三)

      7、额外多说一点,签名文件,版本修改,在build.gradle里可以修改app的版本号,如果要更换签名文件到工程中找到key.properties

      开源刺客引擎二开教程(三)

      8、程序的入口是AppActivity,下面是我修改过的纯净的源码

      package org.cocos2dx.cpp;
       
      import org.cocos2dx.lib.Cocos2dxActivity;
      import org.fmod.FMOD;
       
      import android.os.Bundle;
      import android.view.WindowManager;
      import android.app.AlertDialog;
      import android.content.DialogInterface;
      import android.view.KeyEvent;
       
      public class AppActivity extends Cocos2dxActivity {
       
          static {
              //用于程序开始运行时导入fmod.jar
              System.loadLibrary("fmodL");
          }
       
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              //启动FMOD功能
              FMOD.init(this);
              getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
          }
       
          @Override
          protected void onDestroy() {
              super.onDestroy();
              //关闭FMOD功能
              FMOD.close();
          }
       
       
          @Override
          public boolean onKeyDown(int keyCode, KeyEvent event) {
              if (keyCode == KeyEvent.KEYCODE_BACK) {
                  exitGame();
                  return true;
              }
              return super.onKeyDown(keyCode, event);
          }
       
          public void exitGame() {
              new AlertDialog.Builder(this)
                      .setTitle("提示")
                      .setMessage("确定要退出游戏吗?")
                      .setNegativeButton("取消",
                              new DialogInterface.OnClickListener() {
                                  @Override
                                  public void onClick(DialogInterface dialog,
                                                      int which) {
                                  }
                              })
                      .setPositiveButton("确定",
                              new DialogInterface.OnClickListener() {
                                  public void onClick(DialogInterface dialog,
                                                      int whichButton) {
                                      finish();
                                  }
                              })
                      .show();
          }
      }

      文章转载自YmBok   作者:还如一梦中

      创建和谐社区,请勿发布无意义内容,获取金币请看右边的指南 [金币获取指南]

      请登录之后再进行评论

      登录
      圈子
    • 任务
    • 管理
    • 皮肤
    • 回底部
    • 帖子间隔 侧栏位置: