Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android and ICU 5.0

Tags:

android

icu

I started to use ICU4J in my Android project. But when I run the project on a device, at launch, I have a crash. Here is the error :

 FATAL EXCEPTION: main
 java.lang.ExceptionInInitializerError
    at com.ibm.icu.text.SimpleDateFormat.<clinit>(SimpleDateFormat.java:849)
    at com.ibm.icu.text.DateFormat.get(DateFormat.java:1492)
    at com.ibm.icu.text.DateFormat.getDateInstance(DateFormat.java:1191)
    at com.phonedev.myApp.calendar.TimeCursor.getLongDate(TimeCursor.java:333)
    at com.phonedev.myApp.about.VersionInfo.getBuildDateTime(VersionInfo.java:44)
    at com.phonedev.myApp.myAppActivity.onCreate(myAppActivity.java:184)
    at android.app.Activity.performCreate(Activity.java:5133)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
    at android.app.ActivityThread.access$600(ActivityThread.java:141)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5103)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.util.MissingResourceException: Could not find the bundle com/ibm/icu/impl/data/icudt50b/en_US
    at com.ibm.icu.impl.ResourceBundleWrapper.getBundleInstance(ResourceBundleWrapper.java:109)
    at com.ibm.icu.util.UResourceBundle.instantiateBundle(UResourceBundle.java:573)
    at com.ibm.icu.util.UResourceBundle.getBundleInstance(UResourceBundle.java:145)
    at com.ibm.icu.util.UResourceBundle.getBundleInstance(UResourceBundle.java:228)
    at com.ibm.icu.impl.CalendarData.<init>(CalendarData.java:28)
    at com.ibm.icu.util.Calendar.setWeekData(Calendar.java:4604)
    at com.ibm.icu.util.Calendar.<init>(Calendar.java:1584)
    at com.ibm.icu.util.GregorianCalendar.<init>(GregorianCalendar.java:391)
    at com.ibm.icu.util.GregorianCalendar.<init>(GregorianCalendar.java:337)
    at com.ibm.icu.text.DateFormat$Field.<clinit>(DateFormat.java:1787)
    ... 20 more

It seems that ICU sources requires some more files, but I added all sources I found in the jar... If someone had the same problem or just has the solution... Thanks !

Edit: Just had these warnings :

dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_root'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_zoneinfo64'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_supplementalData'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_res'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_res_index'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_@calendar=gregorian'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en'
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US'
threadid=11: thread exiting with uncaught exception (group=0x4176a700)
like image 579
Kyu_ Avatar asked Aug 07 '13 09:08

Kyu_


1 Answers

Ok I figured out the answer to this issue. Apparently you can not just download the fully built .jar file for ICU and just drop it in. It does not contain the data files.

You HAVE to:

  1. Download the .tgz file that says "gzipped tar archive including the entire source package"
  2. Uncompress that file and cd into that directory
  3. Run "ant" to build ICU4J yourself
  4. It will create a icu4j.jar file which contains the data files you need. You can drop that into your libs directory and amend your gradle build.gradle file to include it

Would have helped if this was explained somewhere on their site or if they actually provided a .jar file that included the data files. This caused about a day long headache to figure out so hopefully this helps someone else.

like image 185
Daniel Ochoa Avatar answered Nov 13 '22 20:11

Daniel Ochoa