我的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文件所在目录中就能找到了.
请问是什么原因呢?
#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文件所在目录中就能找到了.
请问是什么原因呢?
解决方案 »
- android怎么重写SimpleAdapter在getView方法中实现点击Item改变背景色?
- IDA+GDB调试安卓c代码[原创]
- windows下可以编译linphone android 源码么?
- 关于android3G网络上传文件速度问题
- 纯菜鸟问题,怎么把一张图片导入drawable目录下?
- 学习Android要哪些基本知识!
- 问个不是一般白的问题=,=如何看android的apiDemo....
- micro sd卡问题
- 多个GenyMotion之间怎么模拟发送短信?就像AVD一样?
- Android与PC通信,客户端运行失败
- Spinner的弹窗,怎么实现点击空白处不消失!
- 开发andriod,用什么手机好?
原来是路径中带了空格.我的源码放在C:\Program Files\***\Android 下了.
Program Files这个名称含有空格.希望以后的make编译器改进.
放在C:\Program Files\ 不是明智的选择
要不然NDK压根就没ANDROID的框架技术了!!!
我也是,我的C编译没问题,但把C文件修改为CPP文件后缀就报很多莫名的成为-----error stray '\24' in program的错误,看不明白是个什么原因。
尝试在MK中加入
LOCAL_CPP_EXTENSION:=.cpp还有CPP文件好像最好不要直接改名.
因为JNI是用C方式调用的.所以改成CPP后最好也要用
extern "C" {
}
把你的CPP代码括起来.