我的Cygwin下的NDK环境配好了,并可以成功编译ndk目录下的sample目录下的例子并生成.so文件.我的warpo_test_SKiaView.cpp内容如下:#include "warpo_test_SKiaView.h"
#include "SkCanvas.h"
#include "SkPaint.h"
#include "SkGraphics.h"
#include "SkColor.h"
#include "SkTypes.h"
#include "GraphicsJNI.h"JNIEXPORT jint JNICALL Java_warpo_test_SKiaView_renderHello
(JNIEnv *env, jobject thizz, jobject canvas)
{  
SkCanvas* canv = GraphicsJNI::getNativeCanvas(env, canvas);  
if (!canv)  
{  
return 0;  
}  
SkPaint paint;  
paint.setColor(SK_ColorRED); 
canv->drawText("hello skia", 10, 20, 20, paint); return 1;
}我的SKIA源代码在\Cygwin\home\Android\external\skia\include\core下面.比如里面有SkCanvas.h,SkBitmap.h文件等.
我的Android.mk文件内容如下:
# Android.mk by warpo,  20110526LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)MY_ANDROID_SOURCE:=/home/AndroidLOCAL_MODULE:=skiajniLOCAL_CPP_EXTENSION:=.cppLOCAL_SRC_FILES:=warpo_test_SKiaView.cppLOCAL_CPPFLAGS:= \
-I $(MY_ANDROID_SOURCE)/frameworks/base/core/jni/android/graphics \
-I $(MY_ANDROID_SOURCE)/external/skia/include/core \
-I $(MY_ANDROID_SOURCE)/external/skia/include/images \
-I $(MY_ANDROID_SOURCE)/frameworks/base/include \
-I $(MY_ANDROID_SOURCE)/system/core/includeLOCAL_LDLIBS := -llog -lsgl -landroid_runtime -L/home/Android/out/skia/libinclude $(BUILD_SHARED_LIBRARY)我的make版本如下:
$ make -v
GNU Make 3.81但是$NDK/ndk-build后的结果是:
Administrator@CHINA-WARPO /cygdrive/e/android-ndk-r5b/samples/SKiaTest
$ $NDK/ndk-build
Compile++ thumb  : skiajni <= warpo_test_SKiaView.cpp
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:2:22: error: SkCanvas.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:3:21: error: SkPaint.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:4:24: error: SkGraphics.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:5:21: error: SkColor.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:6:21: error: SkTypes.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:7:25: error: GraphicsJNI.h: No such file or directory
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp: In function 'jint Java_warpo_test_SKiaView_renderHello
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:12: error: 'SkCanvas' was not declared in this scope
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:12: error: 'canv' was not declared in this scope
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:12: error: 'GraphicsJNI' has not been declared
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:17: error: 'SkPaint' was not declared in this scope
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:17: error: expected ';' before 'paint'
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:18: error: 'paint' was not declared in this scope
E:/android-ndk-r5b/samples/SKiaTest/jni/warpo_test_SKiaView.cpp:18: error: 'SK_ColorRED' was not declared in this scope
make: *** [/cygdrive/e/android-ndk-r5b/samples/SKiaTest/obj/local/armeabi/objs/skiajni/warpo_test_SKiaView.o] Error 1
请教为什么找不到头文件呢.是Android.mk文件里的错吗.如果我把这些头文件放到Android.mk文件所在目录中就能找到了.
请问是什么原因呢?

解决方案 »

  1.   

    晕,自己解决了.
    原来是路径中带了空格.我的源码放在C:\Program Files\***\Android 下了.
    Program Files这个名称含有空格.希望以后的make编译器改进.
      

  2.   

    ……
    放在C:\Program Files\ 不是明智的选择
      

  3.   

    很关注,你这个是在NDK下使用SKIA这些底层接口对吧?这样用才能发挥ANDROID的技术啊!
    要不然NDK压根就没ANDROID的框架技术了!!!
      

  4.   

    ndk开发需要懂make file文件的写法,在windows 下写C编译器做好了链接工作,但是ndk下属于linux下开发,则需要自己写各个链接的功能,这个链接功能文件就叫makefile文件
      

  5.   

    想问个问题啊!你的CPP编译环境怎么搭建的?我怎么老不成功啊!我编译C的环境是没问题的。怎么定位用C++编译器来编译?
      

  6.   

    我是在Windows下用Cygwin搭建的NDK环境啊.你是怎么方式的?
      

  7.   

    是啊,要懂Linux下的编译就好办了.我还是菜鸟.真是被编译器的这些语法规则纠结了.
      

  8.   


    我也是,我的C编译没问题,但把C文件修改为CPP文件后缀就报很多莫名的成为-----error stray '\24' in program的错误,看不明白是个什么原因。
      

  9.   


    尝试在MK中加入
    LOCAL_CPP_EXTENSION:=.cpp还有CPP文件好像最好不要直接改名.
    因为JNI是用C方式调用的.所以改成CPP后最好也要用
    extern "C" {
    }
    把你的CPP代码括起来.
      

  10.   

    你好,能把你整理好的SK头文件 和 库 发给我麽?谢谢了。[email protected]
      

  11.   

    嗯,在windows下编译android源码非常麻烦,所以,你能把编译好的sk头文件和库发给我吧,谢谢