ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

该库的Android Studio ConsumerProguardFiles不起作用

2019-10-12 02:33:39  阅读:516  来源: 互联网

标签:android android-studio android-library proguard android-proguard


我想在我的图书馆上使用proguard,但文件(规则)应在图书馆内设置.这意味着我不想在我的应用程序模块中显式设置规则(属于该库).

我发现有一个类似于ConsumerProguardFiles属性的东西.我的设置:

库gradle:

buildTypes {
    debug {
        debuggable true
        minifyEnabled false
    }
    release {
        minifyEnabled true
        consumerProguardFiles 'proguard-rules.pro'
    }
}

应用程式gradle:

buildTypes {
    debug {
        applicationIdSuffix ".debug"
        debuggable true
        minifyEnabled false
        signingConfig signingConfigs.debug
    }
    release {
        debuggable false
        minifyEnabled true
        signingConfig signingConfigs.release
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

为什么上面的配置不起作用?我收到无法从库中找到软件包/符号的错误.

编辑:

重要的是,对于库而言,我的proguard-rules.pro和对于主应用程序模块的proguard-rules.pro都为空.

示例性错误:

Error:(3, 60) error: package (my library package here) does not exist
(...)
Error:(16, 9) error: cannot find symbol class NavigationStructureModel
(...)

然后处理了一个错误.如我所见,库中的所有类都丢失了.

解决方法:

您需要弄清楚是否要

>在库上运行proguard
>在应用程序上运行proguard(提示:就是这个.)

在库上运行proguard

那是在它到达应用程序之前.您的库保护程序规则负责使所有代码都可以访问和显示,但是您可能会使内部类难以理解.

这是库build.gradle:

android {
    defaultConfig {
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    buildTypes {
        release {
            minifyEnabled true // Yes, run proguard on the library itself.
        }
    }
}

如果将此库作为开源发布,则不需要此库.如果您不公开发布该库,则不需要此库.

I get errors that packages/symbols from the library cannot be found.

Proguard会在类之间建立依赖关系图.此时,该库是一个独立的单元,因此,如果您不提供任何规则,则不会使用任何类,因此proguard会将其全部删除.

在应用程序上运行proguard

让使用者(应用程序)知道要保留哪些库类.

这是库build.gradle:

android {
    defaultConfig {
        // Here's what proguard on the app should do on the library's behalf.
        consumerProguardFiles 'proguard-consumer-rules.pro' 
    }
    buildTypes {
        release {
            minifyEnabled false // No, don't proguard the library itself.
        }
    }
}

守护者如何工作

您需要告诉proguard要保留什么代码和要保留什么名称. Proguard会删除所有未使用的代码,并扰乱您不想保留的名称.

您不告诉proguard要删除什么,而是告诉proguard要保留什么.

标签:android,android-studio,android-library,proguard,android-proguard
来源: https://codeday.me/bug/20191012/1897450.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有