Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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
如何在我的Android库(AAR)中包含proguard配置_Android_Gradle_Proguard_Aar - Fatal编程技术网

如何在我的Android库(AAR)中包含proguard配置

如何在我的Android库(AAR)中包含proguard配置,android,gradle,proguard,aar,Android,Gradle,Proguard,Aar,根据,Android库包含一个“proguard.txt”文件。 我的理解是,该文件声明了如何正确地对库进行模糊处理和缩小。在我的例子中,我需要保留一些API类 如何在库的build.gradle中声明库的proguard.txt文件?在创建使用我的库的应用程序(APK)时,是否会自动读取此文件 我在Android的Gradle插件用户指南中没有找到此信息。在Gradle文件的默认配置闭包中,使用consumerProguardFiles而不是proguardFiles指定Proguard文件。

根据,Android库包含一个“proguard.txt”文件。 我的理解是,该文件声明了如何正确地对库进行模糊处理和缩小。在我的例子中,我需要保留一些API类

如何在库的build.gradle中声明库的proguard.txt文件?在创建使用我的库的应用程序(APK)时,是否会自动读取此文件


我在Android的Gradle插件用户指南中没有找到此信息。

在Gradle文件的默认配置闭包中,使用
consumerProguardFiles
而不是
proguardFiles
指定Proguard文件。例如:

defaultConfig {
    consumerProguardFiles 'proguard.txt'
}

ProGuard人工制品

人工制品未缩小,消费者解决它


库是开源的,但作为库开发人员,您可以提供一个ProGuard文件,消费者(应用程序)将根据需要考虑该文件(
minifyEnabled true
in consumer)
consumerProguardFiles
在您的库中
build.gradle
。它在人工制品中添加
proguard.txt
文件(与
.pro
相同)

例如,您的库是开源的,而应用程序开发人员希望缩小所有的库

android {
    defaultConfig {
        //consumerProguardFiles '<file_path>'
        consumerProguardFiles 'proguard-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }
    //...
}
android{
默认配置{
//consumerProguardFiles“”
ConsumerProGuard文件的proguard规则.pro'
}
建筑类型{
释放{
minifyEnabled false
}
}
//...
}
人工制品缩小了

库是封闭源代码-您可以使用下一种可能性:

android {

    buildTypes {
        release {
            minifyEnabled true
            //proguardFiles project(':<project_name>').file('<file_path>')
            proguardFiles 'proguard-rules.pro'
        }
    }
    //...
}
android{
建筑类型{
释放{
minifyEnabled true
//proguardFiles项目(':')。文件(“”)
proguard文件的proguard rules.pro'
}
}
//...
}
*请注意:

  • minifyEnabled true
    proguardFiles项目
    都应设置
  • 如果使用单
    minifyEnabled true
    是错误的-
    类。jar
    是空的
  • 如果单个
    proguardFiles项目
    -无效

至于
库-应用程序
-示例上的构建过程,所有
.class
文件将合并为具有
.dex
扩展名

的单个存档,这似乎是@kevinpelgrims的副本。这是关于为外部库用户分发带有嵌入式proguard配置的AAR文件,我不希望答案是相同的,即库类不会在多模块构建中缩小两次。问题是相似的。
consumerProguardFiles
应该在
defaultConfig
中指定,而不是
buildTypes/release
中指定,这样当消费应用程序在调试和发布模式下进行升级时(例如,为了避免65k dex方法限制)。如果您使用的是gradle实验插件(0.7.2)它导致了这个错误:原因:org.gradle.api.internal.ExtensibleDynamicObject.build.gradle的一个很好的例子是在这个链接中:“创建库”和“将库作为存档分发”是什么意思?我猜当创建一个库时,它将被用作其他库或应用程序中的依赖项。在这种情况下,它不应该总是minifyEnabled false,因为这里的“library”模块不知道其他lib/应用程序将引用什么函数,并且很难确定收缩/混淆什么?@lannyf,我已经更新了我的答案