Android Crash with Proguard

977 views
Skip to first unread message

Santhoshkumar Sunderrajan

unread,
Aug 7, 2015, 10:52:45 PM8/7/15
to discuss-webrtc
I have an app using libjingle_peerconnection_so.so and it works fine on debug mode. When I do a store build with Proguad enabled, it is crashing for me:

08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]     in call to CallStaticBooleanMethodV
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]     from java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.String)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65] "Thread-324083" prio=5 tid=17 Runnable
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   | group="main" sCount=0 dsCount=0 obj=0x1307c660 self=0xb4f11000
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   | sysTid=24587 nice=-11 cgrp=apps sched=0/0 handle=0xafc12980
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   | state=R schedstat=( 17078072 10143959 103 ) utm=0 stm=1 core=0 HZ=100
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   | stack=0xa18fe000-0xa1900000 stackSize=1036KB
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   | held mutexes= "mutator lock"(shared held)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #00 pc 00004640  /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+23)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #01 pc 00002e8d  /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+8)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #02 pc 00248469  /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+68)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #03 pc 0022cdf3  /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+146)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #04 pc 000b189b  /system/lib/libart.so (art::JniAbort(char const*, char const*)+582)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #05 pc 000b1fd5  /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+60)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #06 pc 0019b495  /system/lib/libart.so (art::JNI::CallStaticBooleanMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+564)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #07 pc 000472eb  /data/app/com.smartipcamera.owlcam-1/lib/arm/libjingle_peerconnection_so.so (???)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #08 pc 00047f11  /data/app/com.smartipcamera.owlcam-1/lib/arm/libjingle_peerconnection_so.so (???)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #09 pc 000481f3  /data/app/com.smartipcamera.owlcam-1/lib/arm/libjingle_peerconnection_so.so (???)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #10 pc 0004b9db  /data/app/com.smartipcamera.owlcam-1/lib/arm/libjingle_peerconnection_so.so (JNI_OnLoad+102)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #11 pc 001d4c37  /system/lib/libart.so (art::JavaVMExt::LoadNativeLibrary(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, art::Handle<art::mirror::ClassLoader>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)+1478)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #12 pc 001fc9c1  /system/lib/libart.so (art::Runtime_nativeLoad(_JNIEnv*, _jclass*, _jstring*, _jobject*, _jstring*)+548)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   native: #13 pc 000197f9  /system/framework/arm/boot.oat (Java_java_lang_Runtime_nativeLoad__Ljava_lang_String_2Ljava_lang_ClassLoader_2Ljava_lang_String_2+152)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at java.lang.Runtime.nativeLoad(Native method)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at java.lang.Runtime.doLoad(Runtime.java:428)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   - locked <0x2fdae695> (a java.lang.Runtime)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at java.lang.Runtime.loadLibrary(Runtime.java:369)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at java.lang.System.loadLibrary(System.java:989)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at org.webrtc.PeerConnectionFactory.<clinit>(unavailable:-1)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at org.appspot.apprtc.ae.a(unavailable:-1)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at org.appspot.apprtc.ae.a(unavailable:-1)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at org.appspot.apprtc.af.run(unavailable:-1)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at android.os.Handler.handleCallback(Handler.java:739)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at android.os.Handler.dispatchMessage(Handler.java:95)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at android.os.Looper.loop(Looper.java:145)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65]   at org.appspot.apprtc.a.f.run(unavailable:-1)
08-07 17:17:35.161: A/art(24350): art/runtime/check_jni.cc:65] 
08-07 17:17:35.681: A/libc(24350): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x430040 in tid 24587 (Thread-324083)


what is the proguard setting I should be using? Below is the my current setting:

# To enable ProGuard in your project, edit project.properties

# to define the proguard.config property as described in that file.

#

# Add project specific ProGuard rules here.

# By default, the flags in this file are appended to flags specified

# in ${sdk.dir}/tools/proguard/proguard-android.txt

# You can edit the include path and order by changing the ProGuard

# include property in project.properties.

#

# For more details, see

#   http://developer.android.com/guide/developing/tools/proguard.html


# Add any project specific keep options here:


# If your project uses WebView with JS, uncomment the following

# and specify the fully qualified class name to the JavaScript interface

# class:

#-keepclassmembers class fqcn.of.javascript.interface.for.webview {

#   public *;

#}

-keep class com.google.android.gms.analytics.**

-keep class com.google.analytics.tracking.**

-dontwarn com.google.android.gms.analytics.**

-dontwarn com.google.analytics.tracking.**


##---------------Begin: proguard configuration for Gson  ----------

# Gson uses generic type information stored in a class file when working with fields. Proguard

# removes such information by default, so configure it to keep all of it.

-keepattributes Signature


# For using GSON @Expose annotation

-keepattributes *Annotation*


# Gson specific classes

-keep class sun.misc.Unsafe { *; }

#-keep class com.google.gson.stream.** { *; }


# Application classes that will be serialized/deserialized over Gson

-keep class com.google.gson.examples.android.model.** { *; }


# Webrtc related

-keep class org.webrtc.**

##---------------End: proguard configuration for Gson  ----------




Christoffer Jansson

unread,
Aug 10, 2015, 9:09:37 AM8/10/15
to discuss-webrtc
Hi,

Have you compiled libjingle_peerconnection_so.so using out/Release or out/Debug in this case? It's crashing due to reading memory it does not have access to (Fatal signal 11 (SIGSEGV), code 1, fault addr 0x430040 in tid 24587 (Thread-324083))

AFAIK we do not have any special proguard settings but I could be wrong.

/Chris

Santhoshkumar Sunderrajan

unread,
Aug 10, 2015, 4:54:56 PM8/10/15
to discuss-webrtc
Thanks for the Reply. I tried with both out/Release and out/Debug libraries. They both seem to crash. It doesn't crash when I disable proguard.

santhosh

unread,
Aug 10, 2015, 6:44:46 PM8/10/15
to discuss-webrtc
I was able to fix the problem. I was not excluding autobahn from proguard obfuscation, here is the corrected proquard config that works for me:


# Webrtc related

-keep class org.webrtc.**  { *; }


-keep class org.appspot.apprtc.**  { *; }


-keep class de.tavendo.autobahn.**  { *; }


-keepclasseswithmembernames class * {

    native <methods>;

Reply all
Reply to author
Forward
0 new messages