2016-04-27 2 views
2

Я включилStringUtils.rightPad() в апаче бросает NoSuchMethodError в андроиде

в приложении Gradle в progaurd

compile 'org.apache.commons:commons-lang3:3.0' 

Я включил

-keep class org.apache.commons.lang3.StringUtils* 

но когда приложение пытается получить доступ к StringUtils.rightPad(). он бросает исключение, говоря

java.lang.NoSuchMethodError: org.apache.commons.lang3.StringUtils.a 

код, связанный с

public static String getSignedData(String data) { 
     int blockSize = 64; 
     byte[] key = StringUtils.rightPad(ApplicationConst.getCheckoutAccessKey(), blockSize, (char) 0x00).getBytes(); 
     byte[] iPad = StringUtils.repeat((char) 0x36, blockSize).getBytes(); 
     byte[] oPad = StringUtils.repeat((char) 0x5c, blockSize).getBytes(); 
     byte[] stage1 = hashMessage(concatenate(xor(key, iPad), data.getBytes())); 
     byte[] stageFinal = hashMessage(concatenate(xor(key, oPad), stage1)); 
     return bytesToHex(stageFinal); 
} 
+0

опубликовать связанный код также –

+0

@Vivek отредактировал вопрос. где вставлено исключение. – ARP

ответ

1

Измените свой Proguard скрипт и добавить ниже строки.

-keep class org.apache.commons.lang3.StringUtils { *; } 
-keep public class org.apache.commons.lang3.StringUtils { public protected static *; } 
-keepclassmembers public class org.apache.commons.lang3.StringUtils { *; } 
-keepnames public class org.apache.commons.lang3.StringUtils { *; } 
+0

Спасибо Раджан. Вы спасли мое время. Еще раз спасибо. Кстати, как бы мы решили, что мы должны точно хранить классы и имена в прогаурд. – ARP