在我的 AAR 库中使用 consumerProguardFiles 并在使用 obfuscationdictionary 时获取未找到的文件
Use consumerProguardFiles in my AAR library and get file not found while using obfuscationdictionary
在我的库中,我在 release 构建类型中使用 consumerProguardFiles
。我的混淆器角色是:
-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) 并获取发布版本并使用 minifyEnabled true
时,找不到获取 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
?
要么
我该如何解决这个问题?
提到的所有规则都应该永远不会进入consumerProguardFiles
指向的文件,它们看起来应该进入proguardFiles
构建的行规则图书馆。此外,除非您有非常特殊的要求,否则从 proguardFiles
中删除所有 -obfuscationdictionary
、-classobfuscationdictionary
和 -packageobfuscationdictionary
以构建库将是最好的选择。
consumerProguardFiles
用于库的使用者需要库运行的规则。所有这些规则都将进入使用该库的项目的构建。如果您的库不使用反射,那么很可能根本不需要 consumerProguardFiles
。
我前几天遇到了同样的问题,这是由于你的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
总之,如果你会看中文,可以参考这个blog
使用以下代码:
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'
}
}
代表提问者发表
在我的库中,我在 release 构建类型中使用 consumerProguardFiles
。我的混淆器角色是:
-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) 并获取发布版本并使用 minifyEnabled true
时,找不到获取 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
?
要么
我该如何解决这个问题?
提到的所有规则都应该永远不会进入consumerProguardFiles
指向的文件,它们看起来应该进入proguardFiles
构建的行规则图书馆。此外,除非您有非常特殊的要求,否则从 proguardFiles
中删除所有 -obfuscationdictionary
、-classobfuscationdictionary
和 -packageobfuscationdictionary
以构建库将是最好的选择。
consumerProguardFiles
用于库的使用者需要库运行的规则。所有这些规则都将进入使用该库的项目的构建。如果您的库不使用反射,那么很可能根本不需要 consumerProguardFiles
。
我前几天遇到了同样的问题,这是由于你的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
总之,如果你会看中文,可以参考这个blog
使用以下代码:
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'
}
}
代表提问者发表