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的類名都混淆,要不然調用的時候找不到入口。