2

在我的库中,我consumerProguardFiles发布构建类型中使用。我的proguard角色是:

-obfuscationdictionary proguard-dictionary.txt
-classobfuscationdictionary proguard-dictionary.txt
-packageobfuscationdictionary proguard-dictionary.txt

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/removal/writeonly,!field/marking/private,!class/merging/*,!code/allocation/variable
-flattenpackagehierarchy
-allowaccessmodification
-renamesourcefileattribute SourceFile
-keepattributes *Annotation*
-keepattributes Signature,MethodParameters,LocalVariableTable,LocalVariableTypeTable
-keepattributes SourceFile,LineNumberTable
-keepattributes Exceptions,InnerClasses

当开发人员在项目中使用我的库(AAR)并获取 release build 和 use时,找不到minifyEnabled trueget :proguard-dictionary.txt

AGPBI: {"kind":"error","text":"File not found: /Users/USER/.gradle/caches/transforms-2/files-2.1/12e928515abf78e8a4387fd92c3a399b/proguard-dictionary.txt","sources":[{"file":"/Users/USER
 /.gradle/caches/transforms-2/files-2.1/12e928515abf78e8a4387fd92c3a399b/proguard-dictionary.txt"}],"tool":"D8"}
AGPBI: {"kind":"error","text":"File not found: /Users/USER
 /.gradle/caches/transforms-2/files-2.1/12e928515abf78e8a4387fd92c3a399b/proguard-dictionary.txt","sources":[{"file":"/Users/USER
 /.gradle/caches/transforms-2/files-2.1/12e928515abf78e8a4387fd92c3a399b/proguard-dictionary.txt"}],"tool":"D8"}
AGPBI: {"kind":"error","text":"File not found: /Users/USER
 /.gradle/caches/transforms-2/files-2.1/12e928515abf78e8a4387fd92c3a399b/proguard-dictionary.txt","sources":[{"file":"/Users/USER
 /.gradle/caches/transforms-2/files-2.1/12e928515abf78e8a4387fd92c3a399b/proguard-dictionary.txt"}],"tool":"D8"}

如何在-obfuscationdictionary不使用字典文件的情况下使用?或者我该如何解决这个问题?

4

3 回答 3

3

提到的所有规则都不应该进入指向的文件consumerProguardFiles,它们看起来应该进入proguardFiles构建库的行规则。另外,除非您有非常特殊的要求,否则最好省略所有-obfuscationdictionary,-classobfuscationdictionary-packageobfuscationdictionaryfromproguardFiles来构建库。

用于图书馆的consumerProguardFiles使用者需要为图书馆工作的规则。所有这些规则都将进入使用该库的项目的构建中。如果您的库不使用反射,那么consumerProguardFiles很可能根本不需要。

于 2019-06-17T09:30:25.033 回答
1

使用以下代码:

buildTypes {
        debug {
            minifyEnabled false
            debuggable true
        }
        release {
            minifyEnabled true
            debuggable false
            // automatically add your proguard rules into your library user
            consumerProguardFiles 'proguard-rules.pro'
            proguardFiles 'proguard-rules-dic.pro', 'proguard-rules.pro'
        }
}

代表提问者发布

于 2021-11-17T08:12:17.213 回答
-1

几天前我也遇到了同样的问题,这是因为你的aar文件没有包含“proguard-dictionary.txt”文件,你可以通过解压你的aar文件来检查。要解决此问题,您可以这样做:

  • 在您的库下创建一个名为“assets”的文件夹,然后将您的“proguard-dictionary.txt”文件放入此文件夹。

  • 将“assets”文件夹添加为 android assets 源,您可以将以下代码添加到 build.gradle 文件中:

     sourceSets {
         main {
             res.srcDirs = [
                     'src/main/res'
             ]
    
             java.srcDirs = [
                     'src/main/java'
             ]
             assets.srcDirs = [
                     'assets',
                     'src/main/assets'
             ]
        }}
    

文件树可能是这样的:

 │  build.gradle
 │  proguard-rules.pro
 │
 ├─assets
 │      proguard-dictionary.txt

反正如果你会看中文,可以参考这个博客

于 2021-04-01T01:53:19.680 回答