首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >前卫库和第三方库

前卫库和第三方库
EN

Stack Overflow用户
提问于 2012-05-29 19:07:54
回答 2查看 5.4K关注 0票数 2

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

目前,我有以下错误:

代码语言:javascript
复制
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选项指定jars,Proguard会警告很多关于重复类的信息。

我的蚂蚁构建:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-29 19:17:01

proguard中,您必须使用以下命令指定您的第三方库jars:

代码语言:javascript
复制
-libraryjars  jar1.jar, jar2.jar, jar3.jar...

如果您不像上面那样包含这些jars,那么与它们相关的代码将不会被混淆/优化/缩小,因为它们将无法相对于proguard进行解析。

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

票数 2
EN

Stack Overflow用户

发布于 2012-06-05 21:29:44

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10797921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档