A. java 代码导出jar包 混淆的问题
可以用proguard混淆,proguard有个混淆配置文件,应该能达到楼主的要求
B. JAVA 有对源代码进行混淆的混淆器么
不需要对源代码混淆。class有这种功能的,在J2ME中混淆是必须的,结果跟你说的一样,不过原理不是你那么走的,混淆以后的class反编译也会让人看不懂,全部变成了a,b,c,d这样的名字。
C. 反编译的java源码,里面全是abcdef的类名和包名,如何解决
这是被混淆过的jar包。
没有被混淆是可以反编译出来的。
D. android jar包混淆怎么把所有的包名和类名都改写成abcdef这种不规则命名,在线等研究一天了
这个要说起来就太复杂了,简短的回复一下你。首先强调一下混淆的目的就是不让别人能反编译看懂你的代码。包名和类名就相当于PC上的路径名(你可以把它理解为稳定的定位符);清晰的包名类名,能让你很容易定位到文件和方法,改成abcd这简短的名称之后,就使人无法轻易看懂代码了。
E. android jar包类名如何混淆成方框
一、如何指定某个包不被混淆
不被混淆的包下放一个指定不被混淆的class,这样该包名就不会被混淆
举例demo原有目录结构如下:
图1-1
指定MainActivity不被混淆
-keep public class * extends android.app.Activity # 保持哪些类不被混淆
-flattenpackagehierarchy 'yjrtest' #重新包装所有重命名的包并放在给定的单一包中
混淆后的目录结构如下:
图1-2
可以看出除了MainActivity所在的包没有被混淆之外其他的包名都被混淆了。
F. jar 反编译后 可读性很差,包名,类名全是一大串的0oo0 原因与解决办法
这个是用混淆器把代码混淆了。
原作者会这样做是不希望反编译的代码被人看懂,可能是个人原因也可能是出于保密
没有解决办法,有耐心的话理论上挨个程序分析可以破解。
G. 提供给别人使用的jar包怎么混淆
1)导出jar包
如何在eclipse上android工程中导出jar包?google,.bing
2)混淆jar包,打乱代码
android的jar包跟普通的java的jar包不一样,我们不想打乱一些activity或者server等跟系统打交道的代码,这是因为如果把这些也混淆了,那你还需要搞清楚混淆后这些activity变成了什么名字,然后告诉使用你这个jar包的人androidmanifest.xml中增加这些打乱了名字的activity。
混淆jar包用到的工具是proguard,可以在android SDK里面找到,如我的是在...\adt-bundle-windows-x86-20130219\sdk\tools\proguard。
运行sdk\tools\proguard\bin\proguardgui.bat,运行界面如下,如果点击next,会发现这些配置很难配(全英文,又很杂)。
其实这里直接导入一个cfg文件就可以了,单击下图右下角的Load Configuration,然后选择配置文件。
配置文件又要怎么写?找到android工程里面的proguard.cfg文件,这个文件是用来混淆apk代码的配置文件,我们现在是要混淆jar包的代码,当然不能直接用。看下面是proguard.cfg的配置,配置会保留activity和server等一些类。这些配置都是不用改的,可以直接拿来用。
?
-optimizationpasses5
-dontusemixedcaseclassnames
-
-dontpreverify
-verbose
-optimizations
!code/simplification/arithmetic,!field/*,!class/merging/*
-keeppublic class *extends android.app.Activity
-keeppublic class *extends android.app.Application
-keeppublic class *extends android.app.Service
-keeppublic class *extends android.content.BroadcastReceiver
-keeppublic class *extends android.content.ContentProvider
-keeppublic class *extends android.app.backup.BackupAgentHelper
-keeppublic class *extends android.preference.Preference
-keeppublic class com.android.vending.licensing.ILicensingService
- *
{
native <methods>;
}
-keepclasseswithmembersclass *
{
public <init>(android.content.Context,
android.util.AttributeSet);
}
-keepclasseswithmembersclass *
{
public <init>(android.content.Context,
android.util.AttributeSet, int);
}
-keepclassmembersclass *extends android.app.Activity
{
public void *(android.view.View);
}
-keepclassmembersenum *
{
public static **[]
values();
public static **
valueOf(java.lang.String);
}
-keepclass *implements android.os.Parcelable
{
public static final android.os.Parcelable$Creator
*;
}
将上面的配置增加几行改成如下,并重新命名文件为:test.pro
?
-optimizations
!code/simplification/arithmetic,!field/*,!class/merging/*
//...begin
#混淆后的导出jar包的位置和jar包名
-outjars'E:\test_after.jar'
#原始jar包的位置和jar包名
-injars'E:\test.jar'
#jar包依赖的其他库的位置和名称
-libraryjars'E:\workspace\beautytilepuzzle\libs\alipay_msp.jar'
-libraryjars'E:\workspace\beautytilepuzzle\libs\android-support-v4.jar'
-libraryjars'E:\android\adt-bundle-windows-x86-20130219\sdk\platforms\android-10\android.jar'
#下面的Test类将不会被混淆,这样的类是需要被jar包使用者直接调用的
-keeppublic class com.example.Test
{
public <fields>;
public <methods>;
}
//...end
-keeppublic class *extends android.app.Activity
现在Load Configuration里选择上面test.pro,一直next,最后混淆后的jar包就是E://test_after.jar。
用winrar打开jar包,会发现除了Test.class,一些继承自activity等的class外,其他的类都被abcdefg这样的字母给混淆了。
提醒:如果你把上面配置直接拷贝过去,是会失败的,请将文件里的#号后的中文注释去掉,或者改成英文的。
H. 混淆后的jar文件反编译为a.class,b.class等该怎么看
混淆的目的就是不让你轻易看懂的,你若轻易看懂,还要混淆作甚
I. 如何混淆Java编译后的类或jar,或将jar编译成exe,使人无法反编译获得源代码
混淆就可以了
我一直在用proguard4.5.1做Java项目的混淆
J. j2me 生成jar包时加混淆代码的问题
这个和你用的混淆器有关。在调用混淆器的时候配置一下就行了。
比如用ProGuard,你先运行eclipse,选择菜单windows-preferences-j2me-obfuscation,在这里先指定正确的Proguard的根目录,下面是配置Proguard keep eXPressions就是所保存的类,在表格里就要有public class * extends javax.microedition.midlet.MIDlet,因为你不能把midlet的类名都混淆,要不然调用的时候找不到入口。