使用属性打开/关闭 Proguard

Posted

技术标签:

【中文标题】使用属性打开/关闭 Proguard【英文标题】:Turning Proguard On/Off Using Properties 【发布时间】:2012-05-25 09:39:21 【问题描述】:

在我的 project.properties 文件中有一个属性 proguard.config,当我运行 ant 时它会运行 proguard。以下所有情况都会导致 proguard 运行

 proguard.config
 proguard.config=
 proguard.config=proguard.cfg

属性文件中是否有方法可以打开/关闭 proguard?

否则我将需要编写一个脚本来添加/删除或重命名 proguard.config 属性来控制它。我宁愿只获取/设置属性。我想要最好的解决方案。现在我正在编码 replaceregexpr 以将 proguard.config 重命名为要关闭的其他名称。正在寻找更好的解决方案并想知道其他人是如何控制的?

【问题讨论】:

【参考方案1】:

更简单的方法是只需一行

#proguard.config=proguard.cfg

或者甚至最好还是完全忽略它!这样 proguard 根本不会运行。

【讨论】:

【参考方案2】:

这是怎么做的:

不要在 project.properties 文件中设置 proguard.config=proguard.cfg。

在您的 build.properties 文件集中

 proguarded=on    # or whatever variable you chose

如果您正在构建 android,请定义这些宏,以便始终关闭调试:

  <macrodef name="set-app-debuggable">
    <sequential>
        <echo>Updating AndroidManifest.xml with debuggable set to true</echo>           
       <replaceregexp file="./AndroidManifest.xml"
                            match='android:debuggable="(.*)"'
                            replace='android:debuggable="true"'
                            byline="false">         
        </replaceregexp>
    </sequential>
</macrodef>
<macrodef name="set-app-not-debuggable">
    <sequential>
        <echo>Updating AndroidManifest.xml with debuggable set to false</echo>          
        <replaceregexp file="./AndroidManifest.xml"
                            match='android:debuggable="(.*)"'
                            replace='android:debuggable="false"'
                            byline="false">         
        </replaceregexp>
    </sequential>
</macrodef>

然后根据您是否要在 proguard 构建之外保留调试设置这些条件或类似条件:

<target name="-set-mode-check">
    <echo> set mode checking properties ... </echo>
    <echo> Proguard Property  value is '$proguard.config' </echo>
    <echo> Proguard Property  value is '$proguarded' </echo>
    <condition property="proguard.config" value="proguard.cfg">
       <isset property="proguarded"/>
   </condition>
    <echo> Proguard Property  value after condition set is '$proguard.config' </echo>
     <if condition="$proguarded">
        <then>
            <echo>****  This build is proguarded so setting debuggable off  ****</echo>
            <set-app-not-debuggable />
        </then>
        <else>
            <echo>****  This build is not proguarded so setting debuggable on ****</echo>
            <set-app-debuggable />
        </else>
    </if>

</target>

根本不需要在 project.properties 文件中设置 proguard.config。

【讨论】:

【参考方案3】:

设置此属性

minifyEnabled false

在您的应用中build.gradle

像这样在调试和发布中也禁用:

 buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
        debug 
            minifyEnabled false 
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        

    

【讨论】:

以上是关于使用属性打开/关闭 Proguard的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

win10怎么关闭vpn

设计计算机类要求如下:属性:品牌颜色cpu型号,内存容量,硬盘大小,价格,工作状态;方法:打开,关闭,休眠;创建一个计算机对象,调用打开关闭方法

怎样用命令关闭和开启80端口?

如何在反应模式中禁用背景并关闭先前打开的模式

文件的打开与关闭