[原创]编写Android.mk中的LOCAL_SRC_FILES的终极技巧

已废弃, 请参考Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES

问题的引入

在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的就是LOCAL_SRC_FILES源文件列表.
考虑有如下源文件分布的情况:

cpp文件全部位于android项目下的jni文件夹下,结构如下

    jni    
     |---1.cpp
     |---2.cpp
     |---Android.mk
     |---Application.mk
     |---ndk_test.cpp
     |---src    
     |    |---core
     |    |    |---core1.cpp
     |    |    |---core2.cpp
     |    |---src1.cpp
     |    |---src2.cpp

按照通常的写法,在android.mk中,应该写入

LOCAL_SRC_FILES := ndk_test.cpp \
                1.cpp \
                2.cpp \
                src/src1.cpp \
                src/src2.cpp \
                src/core/core1.cpp \
                src/core/core2.cpp

繁琐不堪!

初步解法:一句话引入单个目录(不包括子目录)下的所有cpp源文件

Read More

使用Clover 修正被黑苹果识别为 HD 6xxx 的 HD 6450显卡

AMD HD6450 显卡在黑苹果(OS X 10.7 和 10.8)下是免驱动,不需要任何设置直接就可以使用的,唯一的不足就是系统没有正确识别显卡型号,显卡为 “AMD Radeon HD 6xxx“,平时是不影响使用的
造成这个问题的原因是苹果的显卡驱动ATI6000Controller.kext中的FrameBuffer配置和显卡不合适,以往的解决方法是对ATI6000Controller.kext打补丁,但是往往系统升级后就会失败,还得重新打补丁,这里我用Clover作系统的引导器,它可以在系统启动的过程中动态的修改ATI6000Controller.kext,这样只要把对FrameBuffer的修改写到Clover的配置文件里,再也不怕系统升级更新驱动文件了

Read More

去除警告 Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8

使用ndk-build编译项目的时候会看到一个警告“Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8”,虽然”不怎么”影响结果,看着碍眼

解决方法

在项目里的jni/Application.mk文件里加入一行

APP_PLATFORM := android-8

即可.

为什么会有这个警告?

在android上项目里,可以在AndroidManifest.xml中写入

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>

来表示程序可以运行的最低android设备是android 2.2(API Version 8), 经过详细测试的目标android版本是android 4.2.2(API Version 17).这里定义的是Java API Version

再来看一下ndk(版本r8e)目录下的platforms文件夹,可以看到

android-3
android-4
android-5
android-8
android-9
android-14

一共有6个文件夹,分别表示相应的Native API Version


看到这里就明白了,那个警告的意思就是说,使用的Native API Version比最低版本Java API要高,可能导致的问题就是:
在Native Code里使用了一个platforms/android-14下的API函数,然后程序在 android-8 的设备上运行,当然这个函数在android-8设备上是不存在的,就会崩溃了


为什么Native API的版本数量会少于Java API?

因为android在版本升级的时候,有时候只升级了Java层的API,而Native层的却没有变化

[原创]使用eclipse调试cocos2d-x Native C++ 代码

前提条件:

windows下可以参考夜阑卧听风吹雨的让人死去活来的cocos2d-x安卓开发环境搭建(windows+eclipse+ndk 不用cygwin)

安装NDK Plugin

英文好的同学可以直接查看官方说明Using the NDK plugin,这里我简单翻译一下

  1. 打开eclipse,在菜单里选择Help->Install New Software…
  2. 弹出的窗口里第一个框”Work with:”后面输入https://dl-ssl.google.com/android/eclipse/
  3. 稍等一会,下面会出来”Developer Tools”和”NDK Plugins”,全部选中,Next,同意协议,等安装完成后,重启eclipse
  4. eclipse重启后,到Eclipse->Preferences->Android->NDK,在这里设置你的NDK目录,比如我的,我设置到/android/android-ndk-r8e
  5. 安装完成

导入cocos2d-x目录下的示例游戏

这里我以cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame这个自带的小游戏为例子来说明一下.

Read More