Podpora unicode v android NdK

hlasů
11

Mám velkou C / C ++ knihovnu, která musím použít jako součást projektu Android NDK. Tato knihovna musí být schopen inteligentně zpracovat UTF8 řetězce (například konverze na malá / velká písmena).

Knihovna má podmíněné kompilace k pramici na OS API dělat konverzi, ale nezdá se, že by Android API pro UTF8. (Mbstowcs, etc)

Toto téma říká používat JNI způsobů, jak to udělat (!), Což je řešení poměrně těžká váha.

Přemýšlel jsem o budování JIP , ale protože používá GNU autotools Nejsem si jistý, že může dělat to pracovat s NDK toolchain. : /

Má někdo tváří v tvář tomuto problému a udělat něco jiného, ​​než použití JNI?

EDIT: Moje pokusy o získání JIP sestavit selhání v konfiguračním kroku:

checking wchar.h usability... no
checking wchar.h presence... yes
configure: WARNING: wchar.h: present but cannot be compiled
configure: WARNING: wchar.h:     check for missing prerequisite headers?
configure: WARNING: wchar.h: see the Autoconf documentation
configure: WARNING: wchar.h:     section Present But Cannot Be Compiled
configure: WARNING: wchar.h: proceeding with the preprocessor's result
configure: WARNING: wchar.h: in the future, the compiler will take precedence
checking for wchar.h... yes
checking for library containing wcscpy... none required
checking size of wchar_t... 0
configure: error: There is wchar.h but the size of wchar_t is 0
Položena 15/10/2010 v 17:30
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
11

Použili jsme ICU v NDK. Postupujte podle pokynů v návodu k budování ICU příčných a budete v pořádku. V podstatě budete mít ICU nativní adresáře (například Windows nebo Linux), což je na JIP Cygwin (používáte-li takový) a ještě další pro JIP Android (ARM). Zní to šíleně, ale funguje to!

Zde jsou kroky pro stavbu pod Cygwin. Já používám ‚CrystaX‘ ​​NDK R4, ale to by mělo budovat s vybalení z krabice NDK stejně. ICU verze 4.4, ale pracuje s předchozími verzemi stejně.

  1. záplaty:

  2. Sestavte si svůj hostitelské verzi JIP (například Windows) podle normální. (Zavoláme tento $ HOST_ICU)

  3. Stavět Cygwinı JIP:

    • Vytvořte adresář ICU-cygwin (ti Nazýváme to $ ICU_CROSS_BUILD)
    • Z ICU-cygwin dir spustit '$ HOST_ICU / source / runConfigureICU Cygwin'
    • udělat
  4. Stavět NDK verzi JIP:

    • Vytvořte adresář ICU-android
    • Z ICU-android dir: '$ HOST_ICU / source / configure' s příslušnými parametry příkazového řádku. Je zapotřebí --with-cross-build = $ ICU_CROSS_BUILD a --host = arm-EABI.
    • udělat

I něco takového použít pro předaný (krok # 4) CPPFLAGS / CXXFLAGS / CFLAGS:

-I$NDK_ROOT/build/platforms/android-8/arch-arm/usr/include/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib

A pro LDFLAGS:

-lc -Wl,-rpath-link=$NDK_ROOT/build/platforms/android-8/arch-arm/usr/lib/ -L$NDK_ROOT/build/platforms/android-8/arch-arm/usr/lib/

A další Konfigurace params:

--enable-extras=no --enable-strict=no --enable-static --enable-shared=no --enable-tests=no --enable-samples=no --enable-dyload=no --enable-tools=no --host=arm-eabi --with-data-packaging=archive

Neudělal jsem to ručně na chvíli, je to v současné době vše v zakázkové Python založené build skriptu. Pokud narazíte na jakékoliv jiné potíže, jsem si asi říct, co je problém.

Hodně štěstí!

Odpovězeno 16/10/2010 v 03:13
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more