【问题标题】:Android Studio & ProGuard: cannot resolve symbol getDefaultProguardFile?Android Studio & ProGuard:无法解析符号 getDefaultProguardFile?
【发布时间】:2015-06-14 04:06:20
【问题描述】:

IDE:Android Studio 1.1.0

主题:ProGuard

问题:Android Studio 无法识别 ProGuard 文件或工具,getDefaultProguardFile无法解决并且应用中没有 proguard-android.txtproguard-rules.txt 文件,见下图:(来自 build.gradle)

如何解决这个问题并为我的应用实现 ProGuard 保护?

【问题讨论】:

  • 嗨。 Android Studio 生成的默认文件名似乎是 proguard-rules.pro。你的 gradle 文件中显示的是 proguard-rules.txt。它可能只是文件名。
  • 尝试重建您的项目,然后将项目与 gradle 文件同步。
  • 我做了,还是一样
  • 我使用的是 Android Studio 1.5.1。就我而言,它就像一个魅力。请您发布您的dependencies {...} 吗?
  • 在同一位置剪切和粘贴代码消除了我的错误警告。我对“signingConfigs”有同样的问题/修复。它从来没有阻止我编译,所以也许这是一个误报,至少在我的情况下。

标签: android android-studio proguard android-gradle-plugin


【解决方案1】:

我遇到了同样的问题:

错误消息使文件看起来好像没有找到,因此没有被读取。但是,我进入 sdk/tools/proguard 文件夹找到该文件,并在顶部添加了一条语句来测试该文件是否真的被读取。我在顶部放了“这会崩溃吗?”

从错误中可以看出,确实在构建过程中找到了该文件,并且我添加的语句将其崩溃。因此,“无法解析符号”错误似乎是误报。

【讨论】:

    【解决方案2】:

    试着换成-

    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    

    【讨论】:

    • 我做到了,它实际上不起作用Android Studio无法识别方法getDefaultProguardFile
    • @FadiObaji 你的应用文件夹下有“proguard-rules.pro”文件吗?
    • 确保你的 gradle 文件顶部有这一行" apply plugin: 'com.android.application'"
    • 是的,它在那里,仍然没有运气,我想如果我从 sdk 文件夹中删除 tools 文件夹然后重新下载它将解决问题,因为我复制了整个 SDK 文件夹从另一个窗口
    • 可能是一个原因。祝您旅途愉快:|
    【解决方案3】:

    我真的有同样的问题。所以这就是我的项目成功的原因:

    release {
        minifyEnabled true
        proguardFile 'proguard-rules.pro'
    }
    

    通过此代码测试:

     Log.d(TAG, "TEST!");
     Log.i(TAG, "INFO!");
     Log.e(TAG, "ERROR!");
    

    在 proguard.pro 中,我放置了这个 sn-p(它会删除字节码中的所有 Log.d-Statements)

    -assumenosideeffects class android.util.Log {
        public static int d(...);
    }
    

    猫说:

    MainAct﹕ INFO!
    MainAct﹕ ERROR!
    

    -> 正是我试图实现的目标 :)

    PS:这假设您在模块(又名“app”)文件夹中有proguard.pro 文件。

    【讨论】:

    • 实际上,当我创建signed apk 时,一切正常,我反编译了文件以查看proguard 是否有效并且确实有效,我不知道为什么android studio 说@987654330 @
    • 哦,不错。在我的情况下(隐藏日志),如果我按照上面写的方式设置文件,AS 只会运行 proguard 配置。
    • 我认为proguard 会从您的应用程序中删除所有logs 而不告诉它这样做,它在proguard 描述中
    • 这不应该是默认行为.. (AFAIK)^^
    • options.compilerArgs 这样的其他方法呢?我也有cannot resolve symbol options
    【解决方案4】:

    试试:

    proguardFiles.add(file('proguard-android.txt')) proguardFiles.add(file('proguard-rules.txt'))

    此结构适用于 gradle-experimental 插件。

    【讨论】:

      【解决方案5】:

      我通过使用双引号而不是单引号解决了 Android Studio 无法识别该方法的问题。以下是我最终使用的:

          release{
              shrinkResources true
              minifyEnabled true
              proguardFiles getDefaultProguardFile("proguard-android.txt"),
                      "proguard-rules.pro"
          }
      

      【讨论】:

        【解决方案6】:

        试试这个,

        {
          minifyEnabled false
          // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
          proguardFiles 'proguard-rules.pro'
        }
        

        【讨论】:

          【解决方案7】:

          就我而言:

          buildTypes {
              release {
                  runProguard false
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              }
          }
          

          runProguard false 替换为minifyEnabled false 有效。

          【讨论】:

          • minifyEnabled false 将禁用 ProGuard 混淆
          猜你喜欢
          • 1970-01-01
          • 2015-07-03
          • 2018-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-15
          • 1970-01-01
          相关资源
          最近更新 更多