NDK 로 Graphite 2 컴 파일 하기

4962 단어 C++jniNDKSTLGraphite2
Graphite is a "smart font" system developed specifically to handle the complexities of lesser-known languages of the world.
위의 이 말 은 Graphite 홈 페이지(http://scripts.sil.org/cms/scripts/page.php?site_id=projects&item_id=graphite_hom)에서 떼 어 낸 이 Open Source library 의 기능 에 대한 설명이것 은 Harfbuzz 와 유사 한 텍스트 shape 엔진 입 니 다.다만 shape 과정 에서 font 파일 에서 제공 하 는 정보 에 더욱 의존 할 것 입 니 다.미얀마 어 처리 에 있어 Graphite 엔진+Padauk font 파일 의 조합 방안 은 완벽 하 다 고 할 수 있다.
이 library 가 사용 하 는 API 도 대부분 standard C++의 범위 안에 있 기 때문에 NDK 로 이 library 를 컴 파일 하 는 데 좋 은 조건 을 만 들 었 습 니 다.
NDK 에서 STL 방법 을 사용 하면 Google 공식 문서(prebuilts/ndk/7/sources/cxx-stl/gnu-libstdc+/README)의 한 단락 을 볼 수 있 습 니 다.
이 글 에서 언급 한 것
application.mk 의 의 미 는 jni 라 는 folder 아래 원래 의 Android.mk 파일 을 바탕 으로 다른 이름 을 추가 해 야 한 다 는 것 입 니 다.
응용 프로그램.mk 파일.graphite 2 를 컴 파일 하기 위해 추 가 된 것 입 니 다.
응용 프로그램.mk 파일 에서 실제로 한 마디 만 할 수 있 습 니 다.
This directory contains the headers and prebuilt binaries for the
GNU libstdc++-v3 C++ Standard Template Library implementation.

These are generated from the toolchain sources by the rebuild-all-prebuilt.sh
script under build/tools.

To use it, define APP_STL to 'gnustl_static' in your Application.mk.
See docs/CPLUSPLUS-SUPPORT.html for more details.

This implementation fully supports C++ exceptions and RTTI.

이러한 module 을 컴 파일 하 는 또 다른 번 거 로 운 점 은 우리 가 소스 파일 list 에 몇 개의 소스 파일 을 추가 해 야 하 는 지 단번에 알 수 없다 는 것 이다.'Undefined reference to...'라 는 build error 정보 가 나 오지 않 을 때 까지 파일 을 하나씩 추가 할 수 밖 에 없 을 것 같 습 니 다.다음 Android.mk 파일 은 반복 적 인 링크 오류->source file 을 추가 하 는 과정 을 거 쳐 얻 은 결과 입 니 다.
APP_STL := gnustl_static

이 Android.mk 파일 중 하 나 는 같은 mk 파일 에서 두 library 에 대한 컴 파일 방법 을 정의 하 는 것 입 니 다.개인 적 으로 중요 한 것 은 include$(CLEARVARS)이 줄.그것 의 의 미 는 대체적으로 앞에서 정 의 된 모든 변 수 를 제거 하 는 것 이다.이렇게 하면 아마도 우 리 는 여러 개의 Android.mk 파일 을 하나 로 통합 하 는 데 편리 할 것 이다.
ndk-build 를 실행 하면 출력 은 아래 와 같 습 니 다.
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

HOME := /media/hanpfei

ANDROID_SOURCE_TOP=$(HOME)/LinData/android_src/JellyBean

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp \
                   JniHelper.cpp\
                   JniDebug.cpp

LOCAL_LDLIBS    := -llog

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := graphite2

LOCAL_SRC_FILES := graphite2-1.2.0/src/Bidi.cpp \
                   graphite2-1.2.0/src/CachedFace.cpp \
                   graphite2-1.2.0/src/call_machine.cpp \
                   graphite2-1.2.0/src/CmapCache.cpp \
                   graphite2-1.2.0/src/Code.cpp \
                   graphite2-1.2.0/src/Face.cpp \
                   graphite2-1.2.0/src/FeatureMap.cpp \
                   graphite2-1.2.0/src/FileFace.cpp \
                   graphite2-1.2.0/src/Font.cpp \
                   graphite2-1.2.0/src/GlyphCache.cpp \
                   graphite2-1.2.0/src/GlyphFace.cpp \
                   graphite2-1.2.0/src/gr_face.cpp \
                   graphite2-1.2.0/src/gr_font.cpp \
                   graphite2-1.2.0/src/gr_logging.cpp \
                   graphite2-1.2.0/src/gr_slot.cpp \
                   graphite2-1.2.0/src/json.cpp \
                   graphite2-1.2.0/src/NameTable.cpp \
                   graphite2-1.2.0/src/Pass.cpp \
                   graphite2-1.2.0/src/SegCache.cpp \
                   graphite2-1.2.0/src/SegCacheEntry.cpp \
                   graphite2-1.2.0/src/SegCacheStore.cpp \
                   graphite2-1.2.0/src/Segment.cpp \
                   graphite2-1.2.0/src/Silf.cpp \
                   graphite2-1.2.0/src/Slot.cpp \
                   graphite2-1.2.0/src/Sparse.cpp \
                   graphite2-1.2.0/src/TtfUtil.cpp \
                   graphite2-1.2.0/src/UtfCodec.cpp

LOCAL_C_INCLUDES += \
        $(LOCAL_PATH)/graphite2-1.2.0/src \
        $(LOCAL_PATH)/graphite2-1.2.0/include

include $(BUILD_SHARED_LIBRARY)

End

좋은 웹페이지 즐겨찾기