Android 代码混淆问题

J2EE程序员 2013-04-18 06:39:20
项目用到了几个第三方Jar包,需要混淆时不混淆第三方Jar包

我的proguard.cfg的内容如下:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
#-ignorewarnings
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keepattributes *Annotation*
-keepattributes Signature

-libraryjars libs/android-support-v4.jar
-libraryjars libs/commons-net-3.2.jar
-libraryjars libs/open_sdk.jar
-libraryjars libs/ormlite-android-4.42.jar
-libraryjars libs/umeng_sdk.jar
-libraryjars libs/ormlite-core-4.42.jar

-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.support.v4.**

#-keep public class * extends org.apache.commons.net.**

#-keep public class * extends com.tencent.**

#-keep public class * extends com.umeng.**
#-keep public class * extends com.umeng.analytics.**
#-keep public class * extends com.umeng.common.**
#-keep public class * extends com.umeng.newxp.**

#-keep public class * extends com.j256.ormlite.**
#-keep public class * extends com.j256.ormlite.android.**
#-keep public class * extends com.j256.ormlite.field.**
#-keep public class * extends com.j256.ormlite.stmt.**

-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
-keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager


-keep class com.android.vending.licensing.ILicensingService
-keep class android.support.v4.** { *; }
-keep class org.apache.commons.net.** { *; }
-keep class com.tencent.** { *; }

-keep class com.umeng.** { *; }
-keep class com.umeng.analytics.** { *; }
-keep class com.umeng.common.** { *; }
-keep class com.umeng.newxp.** { *; }

-keep class com.j256.ormlite.** { *; }
-keep class com.j256.ormlite.android.** { *; }
-keep class com.j256.ormlite.field.** { *; }
-keep class com.j256.ormlite.stmt.** { *; }

-dontwarn android.support.v4.**
-dontwarn org.apache.commons.net.**
-dontwarn com.tencent.**

-dontwarn com.umeng.**
-dontwarn com.umeng.analytics.**
-dontwarn com.umeng.common.**
-dontwarn com.umeng.newxp.**

-dontwarn com.j256.ormlite.**
-dontwarn com.j256.ormlite.android.**
-dontwarn com.j256.ormlite.field.**
-dontwarn com.j256.ormlite.stmt.**

-keepclasseswithmembernames 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);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}



运行后出现如下Log.txt错误信息,我尝试过调整,但是最终还是失败了!

04-18 18:32:16.619: E/AndroidRuntime(8902): FATAL EXCEPTION: main
04-18 18:32:16.619: E/AndroidRuntime(8902): java.lang.RuntimeException: Unable to create application com.ishow.funnymap.FunnyApplication: java.lang.IllegalStateException: Could not find constructor that hast just a (Context) argument for helper class class com.ishow.funnymap.database.DatabaseHelper
04-18 18:32:16.619: E/AndroidRuntime(8902): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4118)
04-18 18:32:16.619: E/AndroidRuntime(8902): at android.app.ActivityThread.access$1300(ActivityThread.java:134)
04-18 18:32:16.619: E/AndroidRuntime(8902): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285)
04-18 18:32:16.619: E/AndroidRuntime(8902): at android.os.Handler.dispatchMessage(Handler.java:99)
04-18 18:32:16.619: E/AndroidRuntime(8902): at android.os.Looper.loop(Looper.java:154)
04-18 18:32:16.619: E/AndroidRuntime(8902): at android.app.ActivityThread.main(ActivityThread.java:4624)
04-18 18:32:16.619: E/AndroidRuntime(8902): at java.lang.reflect.Method.invokeNative(Native Method)
04-18 18:32:16.619: E/AndroidRuntime(8902): at java.lang.reflect.Method.invoke(Method.java:511)
04-18 18:32:16.619: E/AndroidRuntime(8902): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
04-18 18:32:16.619: E/AndroidRuntime(8902): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
04-18 18:32:16.619: E/AndroidRuntime(8902): at dalvik.system.NativeStart.main(Native Method)
04-18 18:32:16.619: E/AndroidRuntime(8902): Caused by: java.lang.IllegalStateException: Could not find constructor that hast just a (Context) argument for helper class class com.ishow.funnymap.database.DatabaseHelper
04-18 18:32:16.619: E/AndroidRuntime(8902): at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(Unknown Source)
04-18 18:32:16.619: E/AndroidRuntime(8902): at com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(Unknown Source)
04-18 18:32:16.619: E/AndroidRuntime(8902): at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(Unknown Source)
04-18 18:32:16.619: E/AndroidRuntime(8902): at com.ishow.funnymap.database.DatabaseHelper.a(Unknown Source)
04-18 18:32:16.619: E/AndroidRuntime(8902): at com.ishow.funnymap.FunnyApplication.onCreate(Unknown Source)
04-18 18:32:16.619: E/AndroidRuntime(8902): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
04-18 18:32:16.619: E/AndroidRuntime(8902): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4115)
04-18 18:32:16.619: E/AndroidRuntime(8902): ... 10 more
04-18 18:32:16.619: E/AndroidRuntime(8902): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context]
04-18 18:32:16.619: E/AndroidRuntime(8902): at java.lang.Class.getConstructorOrMethod(Class.java:460)
04-18 18:32:16.619: E/AndroidRuntime(8902): at java.lang.Class.getConstructor(Class.java:431)
04-18 18:32:16.619: E/AndroidRuntime(8902): ... 17 more


非常感谢,如果你知道哪里有问题,请回复我 或者 Email我: 469985793@qq.com
...全文
1165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
J2EE程序员 2014-06-30
  • 打赏
  • 举报
回复
这个解决这个问题,写的博客,一直有朋友询问,就贴一下答案 http://blog.csdn.net/demands/article/details/8825148
BIN307 2013-09-27
  • 打赏
  • 举报
回复
楼主问题解决了吗?求贴出答案啊
J2EE程序员 2013-04-19
  • 打赏
  • 举报
回复
引用 3 楼 haoyizsw 的回复:
把这个类的混淆放开
正在尝试 分离出框架,仅对框架进行混淆!
J2EE程序员 2013-04-19
  • 打赏
  • 举报
回复
引用 2 楼 wenwei19861106 的回复:
为什么不用系统自带的混淆呐
这里用的是Android 自带的混淆
J2EE程序员 2013-04-19
  • 打赏
  • 举报
回复
引用 4 楼 sunmable 的回复:
引用 楼主 Eyebrows_cs 的回复:项目用到了几个第三方Jar包,需要混淆时不混淆第三方Jar包 我的proguard.cfg的内容如下: Java code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354……
我使用

-keepattributes Signature
来避免混淆泛型 并且看错误应该 应该是隐式构造被清理掉了! 我没有好的解决办法! 您说的 反射不混淆 , 具体应该怎么操作呢?
busybeeCS 2013-04-19
  • 打赏
  • 举报
回复
请问一下一般代码混淆的思路是什么啊
sunmable 2013-04-19
  • 打赏
  • 举报
回复
引用 楼主 Eyebrows_cs 的回复:
项目用到了几个第三方Jar包,需要混淆时不混淆第三方Jar包 我的proguard.cfg的内容如下: Java code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465……
Ormlite用到反射,反射类不须要混淆。
haoyizsw 2013-04-19
  • 打赏
  • 举报
回复
把这个类的混淆放开
南瓜饼 2013-04-19
  • 打赏
  • 举报
回复
为什么不用系统自带的混淆呐
J2EE程序员 2013-04-18
  • 打赏
  • 举报
回复
补充一下问题:

Caused by: java.lang.IllegalStateException: Could not find constructor that hast just a (Context) argument for helper class class com.ishow.funnymap.database.DatabaseHelper

Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context]
// 看错误信息 应该是没有显示调用的构造被清空了!

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

	private static final String DATABASE_NAME = "safford.db";
	private static final int DATABASE_VERSION = 11;
	private final String TAG = "DatabaseHelper";

	private Dao<ConnotationEssay, Long> connotationEssayDao;
	private Dao<Post, Long> postDao;
	private static volatile DatabaseHelper instance;

	public static void init(Context context) {
		if (instance == null) {
			instance = (DatabaseHelper) OpenHelperManager.getHelper(context,
					DatabaseHelper.class);
			// call this to make sure database be created/updated when init.
			instance.getReadableDatabase();
		}
	    }
        ....
        }

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧