I use LocalSocket and LocalServerSocket for cross-process communication. my code is:
public class SocksThread extends Thread {
public static final String TAG = "SocksThread";
private File mProtect = null;
private SocksService mSocksService = null;
private volatile Boolean mIsRunning = true;
private volatile LocalServerSocket mLocalServerSocket = null;
public SocksThread(SocksService SocksService) {
mSocksService = SocksService;
mProtect = new File(mSocksService.getFilesDir(), SocksConfig.SHARE_PATH_PROTECT_PATH);
}
@Override
public void run() {
mProtect.delete();
try {
LocalSocket localSocket = new LocalSocket();
localSocket.bind(new LocalSocketAddress(mProtect.getAbsolutePath(), LocalSocketAddress.Namespace.FILESYSTEM));
mLocalServerSocket = new LocalServerSocket(localSocket.getFileDescriptor());
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "unable to bind", e);
return;
}
final LocalSocket socket = mLocalServerSocket.accept();
}
}
There is no problem without proguard, but when I set proguard, the following line throw error:
final LocalSocket socket = mLocalServerSocket.accept();
And the error log is:
java.io.IOException: accept failed: EBADF (Bad file descriptor)
at android.net.LocalSocketImpl.accept(LocalSocketImpl.java:347)
at android.net.LocalServerSocket.accept(LocalServerSocket.java:90)
at com.mobile.socks.core.d.run(SockThread.java:56)
Caused by: android.system.ErrnoException: accept failed: EBADF (Bad file descriptor)
at libcore.io.Posix.accept(Native Method)
at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:64)
at android.system.Os.accept(Os.java:43)
at android.net.LocalSocketImpl.accept(LocalSocketImpl.java:344)
at android.net.LocalServerSocket.accept(LocalServerSocket.java:90)
at com.mobile.socks.core.d.run(SockThread.java:56)
my proguard rules is:
#指定代码的压缩级别
-optimizationpasses 7
#混淆时不会产生形形色色的类名
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
#不优化输入的类文件
-dontoptimize
#不压缩输入的类文件
-dontshrink
#预校验
-dontpreverify
#混淆时是否记录日志
-verbose
#混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#忽略警告
-dontwarn android.support.**
#保护给定的可选属性
-keepattributes Exceptions,InnerClasses,Signature,SourceFile,LineNumberTable,*Annotation*
#优化时假设指定的方法,没有任何副作用
-assumenosideeffects class android.util.Log {
# public static *** v(...);
# public static *** i(...);
# public static *** d(...);
# public static *** w(...);
# public static *** e(...);
# public static *** a(...);
}
-assumenosideeffects class java.io.PrintStream{
public void println(...);
}
# 忽略把包时的warning,使得打包过程能顺利通过
-ignorewarnings
########## 记录生成的日志数据,gradle build时在本项目根目录输出 start ##########
#描述 apk 文件中所有类文件间的内部结构
-dump dump.txt
#列出了未被混淆的类和成员
-printseeds seeds.txt
#列出从 apk 中删除的代码
-printusage unused.txt
#列出了原始的类,方法,和字段名与混淆后代码之间的映射
-printmapping mapping.txt
########## 记录生成的日志数据,gradle build时 在本项目根目录输出 end ##########
# 忽略警告
-dontwarn com.testmobile.**
-dontwarn com.alibaba.**
-dontwarn com.taobao.**
-dontwarn com.google.android.maps.**
-dontwarn java.awt.**
-dontwarn anetwork.channel.**
-dontwarn org.android.**
-dontwarn android.content.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.**
-dontwarn com.facebook.**
-dontwarn okio.**
-dontwarn com.squareup.okhttp.**
-dontwarn okhttp3.**
-dontwarn javax.annotation.**
-dontwarn com.android.volley.toolbox.**
-dontwarn android.net.http.**
-dontwarn org.apache.http.**
-dontwarn android.support.v4.**
# 保持哪些类不被混淆
-keep public class android.webkit.WebView {*;}
-keep public class android.webkit.WebViewClient {*;}
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.widget.*{*;}
-keep public class com.android.vending.licensing.ILicensingService
-keep class org.apache.http.** {*;}
-keep class com.tencent.** {*;}
-keep class com.taobao.** {*;}
-keep class com.alibaba.** {*;}
-keep class com.umeng.**{*;}
-keep class com.android.internal.util.** {*;}
-keep class android.taobao.** {*;}
-keep class android.webkit.**
-keep class android.** {*;}
-keep class android.annotation.** {*;}
-keep class android.support.v4 {*;}
-keep class android.content.** {*;}
-keep class dalvik.** {*;}
-keep class java.** {*;}
-keep class javax.** {*;}
-keep class org.** {*;}
-keep class org.android.** {*;}
-keep class org.apache.** {*;}
-keep class org.json.** {*;}
-keep class com.google.android.gms.** { *; }
-keep class com.google.i18n.phonenumbers.**
-keep class android.support.annotation.** { *; }
# 一些需要用Gson解析的bean类都不混淆
-keep class com.testmobile.whatstest.server.bean.**
-keep class * extends com.testmobile.whatstest.server.bean.**
-keep class com.testmobile.testFoo.testserver.bean.**
-keep class com.testmobile.whatstest.cloud.bean.**
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.content.Context {
public void *(android.view.View);
public void *(android.view.MenuItem);
}
-keepclassmembers class * {
*** removeJavascriptInterface();
*** facing;
*** getNumberOfCameras();
*** theUnsafe;
*** allocateInstance(java.lang.Class);
*** getScript(java.lang.String);
*** addLikelySubtags(java.lang.String);
*** elements;
*** name;
*** value;
*** name();
*** value();
*** fetch();
*** length();
*** nullable();
*** unique();
*** columnDefinition();
*** get(java.lang.String,java.lang.String);
*** getSingleton();
*** getMillis();
public <init>(java.lang.String);
public <init>(android.content.Context);
public <init>(android.app.Activity,int);
}
#保持 native 方法不被混淆
-keepclasseswithmembers class * {
native <methods>;
}
#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
#保持自定义控件类不被混淆
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#保持 Serializable 不被混淆
-keepnames class * implements java.io.Serializable
#保持 Serializable 不被混淆
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# 保持枚举 enum 类不被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
#不混淆资源类
-keepclassmembers class **.R$* {
public static <fields>;
}
#event bus 的注解方法不能混淆
-keepclassmembers class ** {
@com.squareup.otto.Subscribe public *;
@com.squareup.otto.Produce public *;
}
#不混淆 jsbridge
-keepclassmembers class ** {
@android.webkit.JavascriptInterface public *;
}
###--------------- 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.** { *; }
-keep class com.google.gson.** { *; }
###--------------- End: proguard configuration for Gson ----------###
###--------------- Begin: proguard configuration for 阿里聚安全组件 ---------------###
-keep class com.taobao.securityjni.**{*;}
-keep class com.taobao.wireless.security.**{*;}
-keep class com.ut.secbody.**{*;}
-keep class com.taobao.dp.**{*;}
-keep class com.alibaba.wireless.security.**{*;}
###--------------- End: proguard configuration for 阿里聚安全组件 ---------------###
###--------------- Begin: proguard configuration for mobpub 广告 ---------------###
-keep class com.mopub.nativeads.*{*;}
-keep class com.mopub.common.**{*;}
-keep class com.mopub.network.**{*;}
-dontwarn com.mopub.**
-keep class com.cmcm.adsdk.nativead.MopubNativeAdLoader{
<fields>;
<methods>;
}
-keep class com.mopub.mobileads.MoPubActivity{
<fields>;
<methods>;
}
-keep class com.mopub.mobileads.MraidActivity{
<fields>;
<methods>;
}
-keep class com.mopub.common.MoPubBrowser{
<fields>;
<methods>;
}
-keep class com.mopub.mobileads.MraidVideoPlayerActivity{
<fields>;
<methods>;
}
###--------------- End: proguard configuration for mobpub 广告 ---------------###
###--------------- Begin: proguard configuration for admob 广告 ---------------###
-keep class com.cmcm.adsdk.adapter.AdmobNativeAdapter{ *; }
-keep public class com.google.android.gms.ads.**{
public *;
}
# For old ads classes
-keep public class com.google.ads.**{
public *;
}
# For mediation
-keepattributes *Annotation*
# Other required classes for Google Play Services
# Read more at http://developer.android.com/google/play-services/setup.html
-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
public static final *** NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}
-keep class com.google.ads.mediation.admob.AdMobAdapter {
*;
}
-keep class com.google.ads.mediation.AdUrlAdapter {
*;
}
-keep public @com.google.android.gms.common.util.DynamiteApi class * { *; }
###--------------- End: proguard configuration for admob 广告 ---------------###
###--------------- Begin: proguard configuration for pingstart ---------------###
-keep class com.pingstart.adsdk.adapter.**{ *; }
-keep class com.pingstart.mobileads.**{ *; }
###--------------- End: proguard configuration for pingstart ---------------###
###--------------- Begin: proguard configuration for facebook 广告 ---------------###
-keep enum com.facebook.**
-keep public interface com.facebook.**
-keep class com.facebook.**
-keep class com.facebook.ads.**{*;}
-keep class FacebookNativeAdapter{ *; }
-keep class com.cmcm.adsdk.adapter.FacebookNativeAdapter{ *; }
-keep class com.cmcm.adsdk.adapter.FacebookInterstitialAdapter{ *; }
-keep class com.cmcm.adsdk.adapter.FaceBookInfomation{ *; }
-keep class com.facebook.** { *; }
-keep class com.google.ads.mediation.facebook.FacebookAdapter {*;}
-keep public final class com.facebook.internal.Utility { *; }
###--------------- End: proguard configuration for facebook 广告 ---------------###
###--------------- Begin: jni类不能混淆 ---------------###
-keep class **.JniHelper { *; }
-libraryjars ../testFoo/src/main/jnisource/libs/armeabi-v7a/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/armeabi-v7a/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/armeabi-v7a/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/armeabi-v7a/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/armeabi-v7a/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/x86/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/x86/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/x86/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/x86/xxx.so
-libraryjars ../testFoo/src/main/jnisource/libs/x86/xxx.so
###--------------- Begin: jni类不能混淆 ---------------###
Could anyone tell me why, i am already mad.....thanks very much.