方法 | 安全性 | 維護性 | 開源友好度 |
---|---|---|---|
刪除.java用.class | ? 極低 | ? 差 | ? |
代碼混淆 (ProGuard) | ? 中等 | ? 易 | ? |
AAR 庫模塊 | ? 高 | ? 易 | ? |
對于.class
步驟 1:編譯生成 .class 文件
-
??打開終端??(Android Studio 底部的?
Terminal
?標簽頁) -
導航到你的模塊目錄(通常是?
app
?或模塊名):
cd app # 進入你的模塊目錄
執行 Gradle 編譯命令生成?.class
?文件:
./gradlew compileDebugJavaWithJavac # 調試版本
# 或發布版本
./gradlew compileReleaseJavaWithJavac
??找到 .class 文件??:
- 生成路徑:
app/build/intermediates/javac/debug/classes/your/package/name/SecondActivity.class
- 示例(包名為?
com.example.app
):
app/build/intermediates/javac/debug/classes/com/example/app/SecondActivity.class
步驟 2:復制 .class 文件到源碼目錄
- 創建用于存放字節碼的特殊目錄(??非標準做法,慎用!??):
mkdir -p app/src/main/java/com/example/app/bytecode
復制編譯好的?.class
?文件到源碼目錄:
cp app/build/intermediates/javac/debug/classes/com/example/app/SecondActivity.class app/src/main/java/com/example/app/bytecode/
步驟 3:修改源碼使用反射加載類
// 在調用 SecondActivity 的地方(如 MainActivity.java)
try {// 動態加載編譯后的類Class<?> secondActivityClass = Class.forName("com.example.app.bytecode.SecondActivity");// 啟動 Activity(假設 SecondActivity 繼承自 Activity)Intent intent = new Intent(this, secondActivityClass);startActivity(intent);
} catch (ClassNotFoundException e) {e.printStackTrace();// 處理異常
}
步驟 4:刪除原始源代碼
- 刪除?
SecondActivity.java
步驟 5:驗證構建
- ??手動刪除?
build
?目錄??(避免殘留緩存) - 重新構建項目:
./gradlew clean assembleDebug
?? 重要警告 & 替代方案
-
??反編譯風險??:
.class
?文件可被工具如?jd-gui?輕松反編譯成源碼。- ??黑客只需10秒就能看到你的"隱藏"代碼??。