• 注册
  • 发贴
  • 手游教程 手游教程 关注:190 内容:1077

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

  • 查看作者
  • 打赏作者
  • 当前位置: 35博客圈 > 手游交流 > 手游教程 > 正文
  • 手游教程
  • LV11
    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   作者:还如一梦中

    请登录之后再进行评论

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