Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Eclipse中导出Android应用程序时,Proguard似乎没有效果/无法运行_Java_Android_Eclipse_Proguard - Fatal编程技术网

Java 在Eclipse中导出Android应用程序时,Proguard似乎没有效果/无法运行

Java 在Eclipse中导出Android应用程序时,Proguard似乎没有效果/无法运行,java,android,eclipse,proguard,Java,Android,Eclipse,Proguard,我即将发布一个Android应用程序,并希望使用Proguard来混淆代码。我按照中所述完成了所有操作,但Proguard似乎没有运行: 这就是我所做的: 该指南说,“proguard.cfg文件在项目的根目录中自动生成”。在我的项目根目录中没有这样的文件,只有一个proguard project.txt文件。我假设这就是指南中提到的confic文件 我没有对proguard project.txt文件进行任何更改。因此,Proguard应该应用于所有类名等 我编辑了project.proper

我即将发布一个Android应用程序,并希望使用Proguard来混淆代码。我按照中所述完成了所有操作,但Proguard似乎没有运行:

这就是我所做的:

  • 该指南说,“proguard.cfg文件在项目的根目录中自动生成”。在我的项目根目录中没有这样的文件,只有一个
    proguard project.txt
    文件。我假设这就是指南中提到的confic文件
  • 我没有对
    proguard project.txt
    文件进行任何更改。因此,Proguard应该应用于所有类名等
  • 我编辑了
    project.properties
    并取消了
    proguard.config=…
    行的注释:

    proguard.config=${sdk.dir}/tools/proguard/proguard android.txt:proguard project.txt

  • 根据指南,这应该是配置Proguard所需的全部内容。运行Proguard所不需要的只是在发布模式下构建应用程序

    我不知道如何在
    发布模式下运行应用程序,但正如指南所说,当应用程序使用“文件/导出/导出Android应用程序”菜单构建时,这是自动完成的

    因此,我导出了应用程序来创建APK。guid表示Proguard每次运行时都会在项目目录中创建多个文件和文件夹,例如
    dump.txt
    mapping.txt
    ,等等。但这些文件都没有创建。此外,console或日志中没有输出。因此,我假设Proguard没有运行


    是否有一种(简单的)方法来测试文件是否被混淆/是否运行了Proguard?要使Proguard正常工作,我还必须做些什么?

    我认为Proguard-project.txt的默认版本没有任何作用。可能是这样的:

    # To enable ProGuard in your project, edit project.properties
    # to define the proguard.config property as described in that file.
    #
    # Add project specific ProGuard rules here.
    # By default, the flags in this file are appended to flags specified
    # in ${sdk.dir}/tools/proguard/proguard-android.txt
    # You can edit the include path and order by changing the ProGuard
    # include property in project.properties.
    #
    # For more details, see
    #   http://developer.android.com/guide/developing/tools/proguard.html
    #
    # Add any project specific keep options here:
    #
    # If your project uses WebView with JS, uncomment the following
    # and specify the fully qualified class name to the JavaScript interface
    # class:
    #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
    #   public *;
    #}
    
    首先,尝试向该文件添加一些内容,以检查项目编译时间是否更改。例如:

    -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
    -optimizationpasses 5
    -allowaccessmodification
    -dontpreverify
    -renamesourcefileattribute SourceFile
    -keepattributes *Annotation*
    -keepattributes SourceFile,LineNumberTable,Signature
    # Obfuscation
    -repackageclasses ''
    -flattenpackagehierarchy ''
    
    您还可以检查运行
    apktool解码\u APK
    是否重命名了类和方法


    我希望这对你有帮助

    非常简单,首先在项目的根文件夹中创建一个文件名proguard.cfg,并定义规则,这是常见规则: 将此行添加到project.properties

    proguard.config=proguard.cfg
    
    然后选择Android工具>导出签名应用程序包,创建密钥存储并查看结果。如果您使用任何特殊的lib,需要在Eclipse无法创建signapk时定义自己的规则,请参阅proguard手册


    如果它可以创建一个签名的apk,您可以在proguard文件夹中看到mapping.txt,用于任何模糊的类/常量

    ,听起来您做的事情都是正确的。导出时,是否使用自己的密钥?Eclipse错误日志显示了什么吗?是否实际导出了.apk文件?非常感谢!我认为通过指定
    Proguard project.txt
    的路径来“激活”Proguard足以启用基本的模糊处理,但事实并非如此。如果不在
    proguard project.txt中指定进一步的细节,proguard将什么也不做。谢谢你的提示:-)