首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sbt-proguard您必须为收缩步骤指定'-keep‘选项

sbt-proguard您必须为收缩步骤指定'-keep‘选项
EN

Stack Overflow用户
提问于 2016-08-04 09:56:44
回答 1查看 1.3K关注 0票数 0

我正在努力让sbt-proguard插件正常工作。我有一个我想要混淆的类库,但我似乎无法在没有上述错误的情况下让插件输出。我已经指定了keep选项,或者至少我认为我已经指定了,但我没有运气。我从Proguard网站上复制了keep选项,上面说它是为类库准备的。此外,我认为插件不会响应我配置的选项。

例如,我想要有更详细的输出,看看输出是否能给我一个线索,告诉我我做错了什么。但是,每当我查看日志文件时,它总是指定默认选项。下面是我的配置。有人能帮我解决这个问题吗?我完全迷路了。谢谢

代码语言:javascript
复制
import sbt.Keys._
import com.typesafe.sbt.SbtProguard._

import ProguardKeys._


lazy val commonDependencies = Seq(
  Dependencies.Libraries.junit,
  Dependencies.Libraries.springBootLogging,
  Dependencies.Libraries.scalaMock,
  Dependencies.Libraries.joda,
  Dependencies.Libraries.scalaTestPlus,
  Dependencies.Libraries.scalaXml,
  Dependencies.Libraries.commonsCodec,
  Dependencies.Libraries.typeSafeConfig
)

val keepClasses =
  """
    |-injars       in.jar
    |-outjars      out.jar
    |-libraryjars  <java.home>/lib/rt.jar
    |-printmapping out.map
    |
    |-keepparameternames
    |-renamesourcefileattribute SourceFile
    |-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
    |                SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
    |
    |-keep public class * {
    |    public protected *;
    |}
    |
    |-keepclassmembernames class * {
    |    java.lang.Class class$(java.lang.String);
    |    java.lang.Class class$(java.lang.String, boolean);
    |}
    |
    |-keepclasseswithmembernames,includedescriptorclasses class * {
    |    native <methods>;
    |}
    |
    |-keepclassmembers,allowoptimization enum * {
    |    public static **[] values();
    |    public static ** valueOf(java.lang.String);
    |}
    |
    |-keepclassmembers class * implements java.io.Serializable {
    |    static final long serialVersionUID;
    |    private static final java.io.ObjectStreamField[] serialPersistentFields;
    |    private void writeObject(java.io.ObjectOutputStream);
    |    private void readObject(java.io.ObjectInputStream);
    |    java.lang.Object writeReplace();
    |    java.lang.Object readResolve();
    |}
  """.stripMargin

proguardSettings

lazy val skedaddleCore = (project in file(".")).
  settings(BuildSettings.buildSettings: _*).
  settings(
    name := "core",
    resolvers := Resolvers.all,
    libraryDependencies ++= commonDependencies,
    merge in Proguard := true,
    proguardVersion in Proguard := "5.2.1",
    options in Proguard --= Seq("-dontnote", "-dontwarn", "-ignorewarnings"),
    options in Proguard ++= Seq("-verbose", "-dontshrink"),
    options in Proguard += keepClasses
  )
EN

回答 1

Stack Overflow用户

发布于 2016-08-05 10:53:09

我最终通过以下配置让插件完成了我想要做的事情。

代码语言:javascript
复制
import sbt.Keys._
import com.typesafe.sbt.SbtProguard._

lazy val commonDependencies = Seq(
  Dependencies.Libraries.junit,
  Dependencies.Libraries.springBootLogging,
  Dependencies.Libraries.scalaMock,
  Dependencies.Libraries.joda,
  Dependencies.Libraries.scalaTestPlus,
  Dependencies.Libraries.scalaXml,
  Dependencies.Libraries.commonsCodec,
  Dependencies.Libraries.typeSafeConfig
)

proguardSettings

ProguardKeys.proguardVersion in Proguard := "5.2.1"

ProguardKeys.options in Proguard ++= Seq("-dontnote", "-dontwarn", "-ignorewarnings")

ProguardKeys.inputs in Proguard <<= (dependencyClasspath in Compile) map { _.files }

ProguardKeys.filteredInputs in Proguard <++= (packageBin in Compile) map ProguardOptions.noFilter

val keepClasses =
  """
    |-keepparameternames
    |-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
    |                SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
    |
    |-keep,includedescriptorclasses interface com.** {
    |    <methods>;
    |}
  """.stripMargin

ProguardKeys.options in Proguard += keepClasses

lazy val skedaddleCore = (project in file(".")).
  settings(BuildSettings.buildSettings: _*).
  settings(
    name := "core",
    resolvers := Resolvers.all,
    libraryDependencies ++= commonDependencies
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38757289

复制
相关文章

相似问题

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