您的位置:首页 > 移动开发 > Cocos引擎

Cocos2dx发布Android包,配置开发环境(菜鸟级入门,一看就会)

2015-11-26 18:53 375 查看

Cocos2d-x源码阅读 UI树2

版权声明:如果对你有用,我多开心呀。

1.下载adt-bundle-windows-x86_64这里边有Eclipse和Android SDK ,这个很方便,因为Eclipse里Android的



SDK路径已经给你配置好了。(找不到官网下载路径就随便在一个网站写下载好了)

PS:1.注意下载的时候要找到自己操作系统对应的版本,32位-32,64-64.

2.之前配置Java环境就不赘述了,这了提一点的是,Java你下载1.7的,你在Eclipse里选择编译器的时候就可以选择1.7之前的,比如1.6,1.5,所以你懂的,下载JKD的时候,

下载高一点的好。这里的编译器选择是在Eclipse里弄的,所以不要管cmd你打Java -version出现什么。

照顾一下新手,普及一下NDK以及Android SDK的知识,

2.下载NDK (Native Develop Kit),至于在哪下载,自己找,找到在哪下载也是入门的一种,地址还是贴出来吧,下载对应版本。

为什么要下载NDK,下载它干嘛,看刚才的科普。简短来说NDK是个从A语言-》B语言的一个桥梁,就好比,你怎么知道Love是爱呢,因为字典上写了,这个NDK就相当于这个字典。当然这么比喻不太清楚,大概就这么个意思,就是Java和C++通过这个东西可以有联系。不再是毫不相关的两个玩意。

3.配置NDK的路径,配置环境的时候,注意路径,你得到哪一层,自己去尝试和揣摩吧 。



PS:这里或许很多Eclipse没有这个插件,我下载这个就没有,那就找一个吧,忘记从哪下的了,放到这里给大家下载。这个插件放在,然后如果你放进去之前打开了Eclipse,需要重启Eclipse。

Android NDK插件下载地址

4.把你的工程 就是proj.android 目录导入Eclipse。导入选用的是 New-》other-》Android-》Android Projects From Existing Code,目录选择该目录。



PS:记住不要选择copy 到 workspace,否则有很多错误。

导入之后,并不算完事。现在不要急着编译。刚才我们配置了SDK和NDK的路径,现在就用到了。

5.SDK 的下载。刚才我们下载的adt-bundle-windows-x86_64里有SDK,但是SDK版本太多,肯定不全的,我们需要的SDK也许就不在这里。所以要下载新的SDK。SDK下载什么样的版本,决定要生成的apk包是要运行在什么样的目标手机中。打开SDKManager,Eclipse可以,资源管理器目录中也可以。你想用哪个生成哪个版本的Android包,就要更新相应的SDK,比如我用的是4.4和4.2我就下了这两个,里面那么多选项,怕什么,不清楚 都下载下来不就行了。

打开

,SDK Manager,从这里或者从Windows资源管理打开 都可以。

下载你需要的版本。




6.SDK的配置。右键Eclipse工程-》properties-》Android。



决定了 你的工程最终会生成哪个版本的Android API 代码。

7.新建NDKBUilder。同样的 工程(右键)-》properties-》Builders。

这个名字随便取,配置Builder







第三张图里的配置不太懂,大家随意配置吧。

这里三张图 就已经很清楚了,就不再啰嗦了。

这里详细的 把NDK_MODULE_PATH给大家看一下F:\XXXX\trunk\client\cocos2d-x-2.2.3;F:\XXXX\trunk\client\cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt;

这里设置。至于为什么这里要这么设置,而不是上边一级或者下面一级目录呢?其实 这跟Android .mk文件有关,

其实 仔细看 就会知道 这些目录 都是作为 NDK的根目录存在的,就是你可以以这个目录为准,就好像你以C盘为准一样,在Android.mk这个文件里你可以加载静态库,可以加载Cpp源文件,所以如果你要使用这两者,并且路径很长,你就可以在 NDK_MODULE_PATH里加入路径。然后再Android.mk文件里,根据你加入的这些任意路径为基础,填写相对路径就能找到对应的比如



这些都是有Android.mk文件存在的文件夹,加载的是静态库,



为什么静态库 这么命名。



跟生成这些静态库的 mk文件的配置是关联在一起的。是有关的。

是你用其他mk文件生成的库的名字,你在java里 用system.loadLibrary("用cocos2dlua"); 就可以,加载这个库了,后面那个_shared可加,可不加。

所以 我们看到了 在其他mk文件导入这些静态库的时候,名字是以LOCAL_MODULE为准的。

这里



就是具体的Cpp文件了,这些要编译到你现在这个Android.mk的库里面。



这里就是 .h文件,这些是你要引用的静态库的。h所在的文件,有了静态库和。h你就可以直接使用库里的函数了。

现在 我们再看一些其他的配置。

AndroidManifest.xml



这个文件的一些配置,package是你要生成的包名,比如你完成游戏后,要上线接入其他渠道SDK比如360,豌豆荚等,它们的包有固定的格式。所以这里要改为它们需要的格式。

注意:改包名涉及的东西较多,千万不能先改这里,要先这样,工程-》右键-》Android Tool-》Rename Application Package。改完之后,会有很多地方报错。这时,还要在Windows资源管理器里建立新的符合要求的包,把相应资源拷贝过去,在Eclipse根据报错进行相应修改。

第二个红框里是要设置你的应用最低和目标Android版本,设置了最低的在低于这个版本的Android机上可能就运行部了,而在高于你设置的android:targetSdkVersion和android:minSdkVersion的机器上,你的应用都可以运行。

icon和label一个设置你的游戏的手机桌面图标,一个是名字。这里 Application和Activity都设置了,而实际上Activity的的更快执行。这两处设置一个就可以了。

最后 记得把你的游戏资源 放到eclipse工程的assert文件夹。

配置好这些 你的应用 基本上没什么大的问题 就可以跑起来了。(之后 会写关于JNI C++和Java互调的一篇总结)。


四、从Activity开始

之前多少了解了一些Android App开发的知识,Android App都是始于Activity的。游戏也是App的一种,因此在Android平台上,Cocos2d-x游戏也是从Activity开始的。于是 Activity,确切的说是Cocos2dxActivity是我们这次引擎驱动机制分析的出发点。

回顾Android Activity的Lifecycle,Activity启动的顺序是:Activity.onCreate -> Activity.onStart() -> Activity.onResume()。接下来我们将按照 这条主线进行引擎驱动机制的分析。


ndk=/home/conowen/android-ndk-r7b

export ndk


#include <string.h>
#include <jni.h>

jstring
Java_com_conowen_helloworld_HelloWorldActivity_helloWorldFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "HelloWorld! I am from JNI !");
}

/*注意,这里

jstring 表示返回值

Java_com_conowen_helloworld_HelloWorldActivity_helloWorldFromJNI

写法是Java+Android工程的包名+Android工程的Activity名+方法名,点号用下划线表示,这个写法很严格。
包名:com_conowen_helloworld
Activity名:HelloWorldActivity
方法名:helloWorldFromJNI

JNIEnv* env, jobject thiz是Native方法自带的参数,可以用来转换一个数据类型。也就是说其实这个helloWorldFromJNI是没有形参的。
*/


Android.mk代码如下

关于Android.mk的编写格式,下一篇博文补全

[java]
view plaincopyprint?





LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #LOCAL_MODULE表示生成的库的名字,前面的lib和后缀名不用写 LOCAL_MODULE := HelloWorld LOCAL_SRC_FILES := HelloWorld.c include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
#LOCAL_MODULE表示生成的库的名字,前面的lib和后缀名不用写
LOCAL_MODULE    := HelloWorld
LOCAL_SRC_FILES := HelloWorld.c

include $(BUILD_SHARED_LIBRARY)

然后在终端里面,转到HelloWorld目录下,执行

[java]
view plaincopyprint?





$ndk/ndk-build

$ndk/ndk-build
$ndk是之前配置的NDK环境变量。编译成功后,会在在目录生成libs和obj两个文件夹,libs里面有刚刚编译成的libHelloWorld.so库。

5、新建一个Android工程

在eclipse里面新建一个Android工程,java代码如下,然后把刚刚生成的libs文件夹拖到Android工程目录下。

[java]
view plaincopyprint?





package com.conowen.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloWorldActivityextends Activity {

/** Called when the activity is first created. */
@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

TextView tv = new TextView(this);
tv.setText(helloWorldFromJNI());
setContentView(tv);
}

public native String helloWorldFromJNI();// native声明,表示这个方法来自Native层。实现过程已经在native层实现了

static {
System.loadLibrary("HelloWorld");// 加载库,前面的lib和,后缀名不用写
}
}

package com.conowen.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

TextView tv = new TextView(this);
tv.setText(helloWorldFromJNI());
setContentView(tv);
}

public native String helloWorldFromJNI();// native声明,表示这个方法来自Native层。实现过程已经在native层实现了

static {
System.loadLibrary("HelloWorld");// 加载库,前面的lib和,后缀名不用写
}
}


效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: