使用的NDK是android-ndk-r6,
使用的Android SDK版本是2.3.1
Android源码使用的是git下载的:git clone http://android.git.kernel.org/...其中包括了external/skia
然后在模拟器中把libskia.so, libskiagl.so,libjnigraphics.so和libandroid_runtime.so提取了出来,
放在了NDK下的platforms\android-9\arch-arm\usr\lib中
我的mk文件是这样的:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
MY_ANDROID_SOURCE=/cygdrive/d/Android_Source
LOCAL_MODULE := libSkiaDemo
LOCAL_CPP_EXTENSION := .cpp
LOCAL_CXXFLAGS :=
LOCAL_C_INCLUDES := $(MY_ANDROID_SOURCE)/frameworks/base/core/jni/android/graphics \
$(MY_ANDROID_SOURCE)/external/skia/include/core \
$(MY_ANDROID_SOURCE)/external/skia/include/images \
$(MY_ANDROID_SOURCE)/external/skia/include/config \
$(MY_ANDROID_SOURCE)/frameworks/base/include \
$(MY_ANDROID_SOURCE)/system/core/include
LOCAL_SRC_FILES := SkiaDemoJni.cpp
LOCAL_LDLIBS := -llog -lsgl -lskia -lskiagl -ljnigraphics -landroid_runtime \
-L$(MY_ANDROID_SOURCE)/out/target/product/generic/system/lib/
include $(BUILD_SHARED_LIBRARY)
NDK中的画字符的代码是这样的:
void Java_com_whtr_example_skiademo_SkiaView_renderText(JNIEnv *env, jobject thizz, jobject canvas)
{
SkCanvas* canv = GraphicsJNI::getNativeCanvas(env, canvas);
if (!canv)
{
__android_log_print(ANDROID_LOG_DEBUG, "bug", "canvas is null ");
//LOGE("!canv");
return;
}
__android_log_print(ANDROID_LOG_DEBUG, "bug", "canvas is NOT null ");
SkPaint paint;
char text[256] = {0};
paint.setColor(SK_ColorBLACK);
strcpy(text, "Hello");
canv->drawText(text, strlen(text), 20, 20, paint);
strcpy(text, "what when");
paint.setAntiAlias(true);
canv->drawText(text, strlen(text), 20, 60, paint);
strcpy(text, "oh, god");
paint.setSubpixelText(true);
canv->drawText(text, strlen(text), 20, 100, paint);
}
然后在cygwin中用$NDK/ndk-build编译并且运行,结果是画不出来。然后我又试了画线和画矩形,是可以画出来的。
大家知道是什么原因吗?
我在下载源码的时候并没有选择那个版本,只是写了路径,如:
git clone http://android.git.kernel.org/framework/base,跟版本有关系吗?
12 个解决方案
#1
#2
哎,再人工置顶一次,希望有大大能帮忙看看
#3
是不是没有设置 字体 或者 字号 导致的?
#4
多谢回复!
我在代码中加入了以下这两句:
paint.setTypeface(SkTypeface::CreateFromName("sans-serif", SkTypeface::kNormal));
//Set Text Size
paint.setTextSize(SkIntToScalar(40));
并且引用了#include "SkTypeface.h"
还是没有出来。能再帮我看看吗?
#5
哎,人工置顶,希望有人能帮忙看看
#6
paint.setColor(SK_ColorBLACK);
会不会是你的背景是黑色的,字也是黑色的。。
会不会是你的背景是黑色的,字也是黑色的。。
#7
我的背景是白色的。
#8
#9
终于解决了,谢谢你们两个的回复。
原因就是Android源码的版本不正确。
原因就是Android源码的版本不正确。
#10
请问楼主具体是什么原因呢?怎么对应起来的呢?
#11
具体原因就是因为so包如果和源码的版本不匹配,那么有些函数功能就不正确。
至于如何对应,那么就是仔细检查你的代码和配置,如果确定这些都没有问题,但是功能却不正确,或者根本不起作用,那么估计就跟引用的源码的版本有问题。还有一个要注意的就是字符串是以左下角为起点的,而不是一般意义上的左上角。
#12
能问一下我用下面的代码为什么写不出字在图片上 老显示skfonthost的一个函数没有完成
SkTypeface *font = SkTypeface::CreateFromFile("C:\\Windows\\Fonts\\simkai.tt");
if ( font )
{
paint.setARGB(255, 255, 0, 0);
paint.setTypeface( font );
paint.setTextSize(24);
canvas.drawText("卡", 8, 0, 70, paint);
}
SkTypeface *font = SkTypeface::CreateFromFile("C:\\Windows\\Fonts\\simkai.tt");
if ( font )
{
paint.setARGB(255, 255, 0, 0);
paint.setTypeface( font );
paint.setTextSize(24);
canvas.drawText("卡", 8, 0, 70, paint);
}
#1
#2
哎,再人工置顶一次,希望有大大能帮忙看看
#3
是不是没有设置 字体 或者 字号 导致的?
#4
多谢回复!
我在代码中加入了以下这两句:
paint.setTypeface(SkTypeface::CreateFromName("sans-serif", SkTypeface::kNormal));
//Set Text Size
paint.setTextSize(SkIntToScalar(40));
并且引用了#include "SkTypeface.h"
还是没有出来。能再帮我看看吗?
#5
哎,人工置顶,希望有人能帮忙看看
#6
paint.setColor(SK_ColorBLACK);
会不会是你的背景是黑色的,字也是黑色的。。
会不会是你的背景是黑色的,字也是黑色的。。
#7
我的背景是白色的。
#8
#9
终于解决了,谢谢你们两个的回复。
原因就是Android源码的版本不正确。
原因就是Android源码的版本不正确。
#10
请问楼主具体是什么原因呢?怎么对应起来的呢?
#11
具体原因就是因为so包如果和源码的版本不匹配,那么有些函数功能就不正确。
至于如何对应,那么就是仔细检查你的代码和配置,如果确定这些都没有问题,但是功能却不正确,或者根本不起作用,那么估计就跟引用的源码的版本有问题。还有一个要注意的就是字符串是以左下角为起点的,而不是一般意义上的左上角。
#12
能问一下我用下面的代码为什么写不出字在图片上 老显示skfonthost的一个函数没有完成
SkTypeface *font = SkTypeface::CreateFromFile("C:\\Windows\\Fonts\\simkai.tt");
if ( font )
{
paint.setARGB(255, 255, 0, 0);
paint.setTypeface( font );
paint.setTextSize(24);
canvas.drawText("卡", 8, 0, 70, paint);
}
SkTypeface *font = SkTypeface::CreateFromFile("C:\\Windows\\Fonts\\simkai.tt");
if ( font )
{
paint.setARGB(255, 255, 0, 0);
paint.setTypeface( font );
paint.setTextSize(24);
canvas.drawText("卡", 8, 0, 70, paint);
}