16

I added the commons codec from apache.org (commons-codec-1.4.jar) in eclipse for my Android application following the instruction here. There is no error in the code. But when I run the application and call the function that use the codec the application stop and need a fore close.

In the logCat says:

Android Runtime: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String

the codeline is: String tmpStr = Base64.encodeBase64String(msg); //msg is a byte[]

The application is for a min SDK version = 7 (Android 2.1), so I can't use Android Base64

Any idea how can I solve the problem?

2
  • 2
    Analyzing the LogCat before the runtime error says: INFO/dalvikvm(292): Could not find method org.apache.commons.codec.binary.Base64.decodeBase64, referenced from method in package WARN/dalvikvm(292): VFY: unable to resolve static method 299: Lorg/apache/commons/codec/binary/Base64;.decodeBase64 (Ljava/lang/String;)[B Commented Feb 28, 2011 at 22:13
  • Consider this answer (using maven): stackoverflow.com/a/26548748/1084488 Commented Oct 24, 2014 at 13:26

4 Answers 4

8

I couldn't get the commons codec to run on a 2.1 emulator either. I gave up in the end and made my own, copying the code from:

Base64 encoder/decoder

It's only just over a hundred lines or so.

Sign up to request clarification or add additional context in comments.

1 Comment

I decided to look for the source code of Android.util.Base64. I copied the code into a new java file called Base64.java. Then I added the file to my project under Android.util package. My application is working fine. But I don't think this is the best approach and how can this affect the application when is runing on Android API 8 or later, which contain this class?
8

I experienced the exact same problem. So i started browsing the android source code, and as it turns out Don's guess about Android having an implementation of org.apache.commons.code.binary is correct. he's wrong about the ability to access it, you can, but its version 1.2 of the apache commons, not version 1.4 or even 1.5. You can see for your self in the android source.

Also as a note, this question is a duplicate of this post.

2 Comments

First link "source" is broken :X
To add, a simple workaround is to refactor the commons package names.
4

I think it has something to do with the name conflicts inside Android libraries.

I copied the java source code of Base64 to my project into the the namespace of org.apache.commons.codec.binary. The project compiled without any problem. However, at the runtime in Android simulator, I had the same error, java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String.

However, after I changed the namespace to com.apache.commons.codec.binary instead of org, the app runs like magic. I guess inside Android implementation, org.apache.commons.codec.binary is used and it doesn't allow you to use it in your code again.

Comments

0

The reason you are having an issue is because those instructions are wrong but there must be a different version of the commons-codec or Base64 class present.

My understanding is that you need to put your jar file into a 'libs' directory at the root of your project to ensure it ends up automatically inside the final apk. Once you put it there, right click the jar file and then go to Build Path-> Add to build path. Should work from there.

3 Comments

I put the commons-codec-1.4.jar into a lib folder inside the folder of my application. I add the jar files as you mention but is the same situation. It run but when the application call the function where is using the codec it foreclose. The logCat is the same.
lib or libs? Its very important that it be libs.
Sorry, my folder name is libs. But is the same. The LogCat before the runtime error have the following: 03-01 12:47:47.781: INFO/dalvikvm(264): Could not find method org.apache.commons.codec.binary.Base64.encodeBase64String, referenced from method dv.sample.and.msgtest.calc 03-01 12:47:47.781: WARN/dalvikvm(264): VFY: unable to resolve static method 311: Lorg/apache/commons/codec/binary/Base64;.encodeBase64String ([B)Ljava/lang/String;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.