【问题标题】:Proguard and 3rd party librariesProguard 和 3rd 方库
【发布时间】:2012-05-29 11:07:53
【问题描述】:

我有一个可运行的罐子,里面有几个 3rd 方罐子。我是否必须使用 Proguard 的 -libraryjar 选项指定这些库,即使它们已经打包在主 jar 文件中?

目前我有这些错误:

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>

【问题讨论】:

    标签: java obfuscation proguard


    【解决方案1】:

    proguard 中,您必须使用以下命令分配您的第 3 方库 jar:

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

    如果您不包含上述这些 jar,则与它们相关的代码将不会被混淆/优化/收缩,因为它们将无法解决 proguard

    警告就可以了,因为它会发现很多同名的类,这很正常,但这不会对结果产生任何负面影响。

    【讨论】:

    • 我已经更新了我的问题,如果看起来没问题,请你检查一下 ant build。
    【解决方案2】:

    我没用过proguard,但是我用过yguard,概念是一样的。

    如果 .class 文件已经在正在处理的 jar 中,则无需再次添加它们。关于未解析的类的错误可能是由于您不使用某些代码,具体取决于不可用的类。如果代码从未被调用,这不是问题。最好的办法是尝试运行应用程序并查看哪些类不可用,然后添加它们。我不会依赖 proguard 的输出来确定是否所有必需的代码都可用。

    jar 文件中没有 jar 文件,对吧?那是行不通的。

    【讨论】:

      猜你喜欢
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2017-12-14
      • 2016-01-02
      • 2014-08-23
      相关资源
      最近更新 更多