2

サードパーティのjarがいくつか入った実行可能なjarがあります。それらのライブラリがすでにメインのjarファイルにパックされている場合でも、Proguardの-libraryjarオプションを使用してそれらのライブラリを指定する必要がありますか?

現時点では、私はこれらのエラーです:

Warning: there were 171 unresolved references to classes or interfaces.
Warning: there were 394 instances of library classes depending on program classes.
Warning: there were 1 unresolved references to program class members.

-libraryjarオプションを指定してjarを指定すると、Proguardは重複するクラスについて多くの警告を出します。

私のアリのビルド:

<target name="jar" depends="compile">
    <delete file="${destfile}" />
    <jar destfile="${destfile}" filesetmanifest="mergewithoutmain" duplicate="preserve">
        <manifest>
            <attribute name="Main-Class" value="main.Main"/>
            <attribute name="Class-Path" value="${classpath}"/>
        </manifest>
    <fileset dir="${target}" includes="**/*.class" />
        <zipfileset excludes="META-INF/*.SF" src="lib1.jar" />
        <zipfileset excludes="META-INF/*.SF" src="lib2.jar" />
        <zipfileset excludes="META-INF/*.SF" src="lib3.jar" />
    </jar>
</target>

<target name="dist" depends="jar">
    <taskdef resource="proguard/ant/task.properties" classpath="${proguard}" />
    <proguard>
        -injars      ${destfile}
        -outjars     ${destfileobfuscated}
        -libraryjars C:/Java/jdk1.6.0_25/jre/lib/rt.jar;
                     C:/Java/jdk1.6.0_25/jre/lib/jsse.jar;
                     C:/Java/jdk1.6.0_25/jre/lib/jce.jar;
                     lib1.jar;
                     lib2.jar;
                     lib3.jar

        -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers

        -keepclasseswithmembers public class * {
            public static void main(java.lang.String[]);
        }
    </proguard>
    <move file="${destfileobfuscated}" tofile="${destfile}" />
</target>
4

2 に答える 2

2

ではproguard、次のコマンドを使用してサードパーティのライブラリjarを割り当てる必要があります。

-libraryjars  jar1.jar, jar2.jar, jar3.jar...

上記のようにこれらのjarファイルを含めない場合、それらに関連するコードは、に関して解決されないため、難読化/最適化/縮小されませんproguard

警告が表示されれば問題ありません。同じ名前のクラスが多数見つかるため、これは正常ですが、結果に悪影響を与えることはありません。

于 2012-05-29T11:17:01.457 に答える
0

私はproguardを使用していませんが、yguardを使用しており、概念は同じです。

.classファイルがすでに処理中のjarファイルにある場合は、それらを再度追加する必要はありません。未解決のクラスに関するエラーは、使用できないクラスによっては、使用しないコードの一部が原因である可能性があります。コードが呼び出されない場合、これは問題ではありません。最善の方法は、アプリケーションを試して実行し、使用できないクラスを確認してから、それらを追加することです。必要なすべてのコードが利用可能かどうかを判断するために、proguardの出力に依存することはありません。

jarファイル内にjarファイルがありませんよね?それはうまくいきません。

于 2012-06-05T13:29:43.977 に答える