Proguard (4.7, 그러나 4.6 문제가 너무 있음)를 사용하여 Android JAR을 난독 화하려고합니다. 문제를 간단한 샘플 프로젝트로 분해 할 수 있습니다.Proguard를 사용하여 JAR을 난독 화하는 동안의 이상한 동작
문제 : 의 경우 일부 기능은 (명확하지 않은 이유로) 노출 된 함수의 인수 이름이 손실되고 때로는 "혼란스러워"(실제로)합니다. 스크래핑 된 것이 훨씬 더 이상하기 때문에 "잃어버린"부분에 집중하고 싶습니다 ...
1) Eclipse에서 라이브러리 프로젝트를 만들었습니다. 안드로이드 SDK는이 프로젝트는 '도서관 프로젝트'로 표시됩니다 몇 가지 이유에 대한 2.1 업데이트 1이며, 하나의 클래스 MyJarEntry.java 한 수출 함수 foo를 가지고
package com.decades.myjar;
import android.location.LocationListener;
public class MyJarEntry {
public void foo(String provider, long minTime, float minDistance, LocationListener listener) {
}
}
2) 내 프로젝트는 하위 디렉토리가 "난독 화"가 과 같은 최신 proguard.jar 플러스 proguard.cfg를 포함하는이
-printmapping out.map
-keepparameternames
-renamesourcefileattribute SourceFile
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keep public class * {
public protected *;
}
3) 내 build.xml 파일은 이클립스에 lib 디렉토리를 구축 한 후 내가 할 있도록 JAR를 구축하고 이런 식으로 최적화를위한 목표를 가지고 "ant jar"및 "and optimize"를 터미널에서 사용합니다.
<project name="MyJar" default="jar" basedir=".">
<description>
Lib JAR builder
</description>
<!-- set global properties for this build -->
<property name="res" location="res" />
<property name="bin" location="bin" />
<!-- Output directories -->
<property name="out.dir" value="bin" />
<property name="out.absolute.dir" location="${out.dir}" />
<property name="out.classes.dir" value="${out.absolute.dir}/com" />
<property name="out.classes.absolute.dir" location="${out.classes.dir}" />
<!-- Pack the jar -->
<target name="jar">
<jar destfile="MyJar.jar" basedir="bin/">
<!-- replace 'com' by what ever you are using -->
<!-- as first part of the package name -->
<!-- e.g. de, org, ... -->
<!-- the ** is important to include the directory recursively -->
<include name="com/**" />
</jar>
</target>
<!-- Obfuscation with ProGuard -->
<property name="version" value="0.0.1"/> <!-- change this occasionally -->
<property name="proguard-dir" value="proguard"/>
<property name="unoptimized" value="MyJar.jar"/>
<property name="optimized" value="MyJar_${version}.jar"/>
<target name="optimize" unless="nooptimize">
<!-- Run obfuscator -->
<java jar="${proguard-dir}/proguard.jar" fork="true" failonerror="true">
<jvmarg value="-Dmaximum.inlined.code.length=16"/>
<arg value="@${proguard-dir}/proguard.cfg"/>
<arg value="-injars ${unoptimized}"/>
<arg value="-outjars ${optimized}"/>
<arg value="-libraryjars /Users/decades/android-sdk-mac_x86/platforms/android-7/android.jar"/>
</java>
</target>
빌드 및 난독 괜찮 build.xml 파일입니다 만, 테스트 프로젝트에 결과 MyJar_0.0.1.jar을 가져온 후 코드 완성 대신 foo는 올바른 매개 변수 이름을 표시하지 않습니다
foo는 (문자열는 arg0, 긴 ARG1, 플로트 ARG2, LocationListener의에서 arg3) "keepparameternames"가 지정되어 있지만
로 제시됩니다.
나는 몇 시간과 시간을 들여서 작동시키지 못했습니다. 난독 화 JAR을 가져 오면 모두 괜찮습니다. 패키지의 다른 함수들도 올바른 매개 변수 이름으로 표시됩니다 ...
실마리가 없습니까?
감사
제가 생각하기에, - 토론토가 트릭을합니다. – decades