• linux android ndk r9b JNI 开发过程(COCOS2D-X配置)


    我是小白

    折腾了两天了。

    终于成功第一次运行~

    网上一堆教程乱死了然后其实现在android官方已经认定NDK为必要开发环境所以现在的配置其实很简单

    另外Cocos2d-x的编译真是奇怪死了对一个只把Ubuntu 当作不能玩游戏到Windows来用更别说知道BASH Shell 的家伙我能莫名奇妙跑出Hello World真是奇迹

    ===============================Android NDK部分==============================================

    先从Android NDK开始吧

    恩直接在安卓的官网下载android 定制过的eclipse里面集成了CDT ADT 还有android sdk     http://developer.android.com/sdk/index.html

    ndk也可以在官网下载到      http://developer.android.com/sdk/index.html

    解压到自己的目录下面,然后添加两个环境变量

    添加环境变量的方法:

    sudo gedit /etc/profile

    在最后添加

    NDKROOT=/home/pipicold/software/android/android-ndk-r9b
    export PATH=$NDKROOT:$PATH
    export NDK_ROOT=/home/pipicold/software/android/android-ndk-r9b
    export ANDROID_SDK_ROOT=/home/pipicold/software/android/sdk

    后面两个是为了后面配置cocos2d-x做准备的

    关于把eclipse的快捷方式配置到桌面的方法自行百度

    然后按照平常的方法新建一个android应用,就是一路next

    然后在Package Explorer里面右键新建好到工程

    【图片】

    选择Android Tools>>Add Native Support,这样就能把NDK 添加到工程里面了

    相对应到工程的文件列表里面就会多出一个jni文件夹。

    里面默认会有两个文件

    一个是以你项目名为名字的<ProjectName>.cpp文件和一个Android.mk文件

    <ProjectName>.cpp的文件内容一开始是空的

    恩于是就可以试试编写一个helloworld了

    大概我就是在/res/layout/activity_firstndk.xml

    里面把默认的TextView加了一句

     android:id="@+id/textstring"
    就像这样:
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textstring"
            android:text="@string/hello_world" />

    然后在/src/<ProjectName>.java的类开始处加上JNI的引用语句

    //JNI parts
        public native String StringGetFromC();
        
        static{
            System.loadLibrary("firstndk");
        }
        
    System.loadLibrary("firstndk");这里引号里面到值在Android.mk里面有描述

    接下来改一下<ProjectName>.cpp里面的内容就OK了

    #include <jni.h>
    #include <string.h>
    extern "C"
    jstring Java_com_example_firstndk_Firstndk_StringGetFromC( JNIEnv* env,
                                                      jobject bbj)
    {
       return env->NewStringUTF("hello pipicold~");
    
        // return (*env)->NewStringUTF(env, "Hello !");
    }

    我注释掉的那一行是在NDK的Sample里面到hello-jni例子里面的语句改的但是编译失败说是语法错误。。我也不知道为什么不过看了源码发现可以这样写于是恩。

    然后就保存运行就OK啦~~

    PS:

    我用的是红米的屌丝手机所以Ubuntu里面没有驱动网上有相关教程的http://www.androidonline.net/article/html/3511.html

    ===============================COCOS2D-X部分==============================================

    下载在官网http://cocos2d.cocoachina.com/download

    解压然后按照官网的说法恩直接运行

    “creat-android-project.sh”

    !但是我靠他是有问题到这个shell脚本

    首先要更改第八和第九行的位置为你的sdk和ndk的位置

    # set environment paramters
    NDK_ROOT_LOCAL="/home/pipicold/software/android/android-ndk-r5"
    ANDROID_SDK_ROOT_LOCAL="/home/pipicold/software/android/sdk"

    然后在第36行

    有个

    for param in ${PARAMS[@]}

    恩这里的作用应该是在创建工程的时候附带一些参数什么的。

    不过我到Ubuntu死也编译失败于是我就改了下

    变成了这样

    for param in $@

    通过了耶!

    然后就按照提示操作什么的这里有个教程http://www.cnblogs.com/zilongshanren/archive/2012/04/28/2473282.html

    最后可能要改权限然后进入生成的文件夹里面的proj.android   运行build_native.sh

    不过这里又坑爹了。。

    编译到一半的时候总是会出现  error: format not a string literal and no format arguments [-Werror=format-security]

    这个问题经过搜索是ndk的版本问题说是用r8e就能解决不过好麻烦所以可以参照这里解决http://www.cocos2d-x.org/forums/6/topics/32437?r=33260#message-33260

    Another answer to the question why defines are bad. Instead of pointing to the function that actually causes the error, compiler just points to the place where the "function" created with define is used. To fix the issue find all occurrences of

     __android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info", buf);


    and change it to

    __android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info", "%s", buf);
    

     就是把所有的__android_log_print函数改一下

    包括有些文件在一开始定义到的

    然后重新运行,最后用Eclipse导入工程编译运行就OK

    good luck

    恩看教程去了。

  • 相关阅读:
    >>> fout = open('output.txt', 'w') Traceback (most recent call last): File "<stdin>", line 1, in <module> PermissionError: [Errno 13] Permission denied: 'output.txt'
    Python元组术语
    Python元组与列表_元组与字典
    Python元组_参数长度可变
    Python元组_赋值与返回值
    Python元组_不可修改
    第二篇-bmob云端服务器的发现
    第一篇-关于语言与计划
    《JavaScript》JS中的常用方法attr(),splice()
    Java接口interface,匿名内部类
  • 原文地址:https://www.cnblogs.com/pipicold/p/3427488.html
Copyright © 2020-2023  润新知