用gradle错误构建apk

时间:2016-04-13 04:38:53

标签: android gradle android-proguard

要使用gradle构建apk,控制台中的错误如下:

如果make minifyEnabled = false,则错误消失。看起来有重复的包。

if(login($email, $user_pwd) == true) {                    
    echo '<div class="alert alert-success">';        
    echo '<strong>Successfully logged!.</strong>';
    echo '</div>';                                  
}

build.gradle如下:

<div class="container bellow-nav">
    <div class="row">
        <div class="col-md-6 content-area">
            <h3>Login</h3>                     
            <hr/>                 
            <form role="form" method="post" id="login_form">                
                <div class="form-group">
                    <label for="email">Email addresse</label>                    
                    <input type="email" name="email" class="form-control" placeholder="Email address">
                </div>               
                <div class="form-group">
                    <label for="pwd">Password</label>                    
                    <input type="password" name="pwd" class="form-control" placeholder="Password">
                </div>                                
                <div class="form-group">
                    <input type="hidden" name="_token" value="<?php echo $form_token; ?>">
                    <input type="submit" name="submit" value="LOGIN" class="btn btn-booking" id="login_bottom" onclick="login_form(this,event);" >
                </div>
                <div class="form-group validation_msg">
                </div>
                <div class="fomr-group">
                    <label for=""><a href="forgot-password"><p>Forgot password?</p></a></label>&nbsp; | 
                    <label for=""><p>Don't have an account? <a href="signup">Join now</p></label>
                </div>                
            </form>
        </div>
    </div><!--main row-->
</div><!--main container end-->

顺便说一下,如何检查哪个包是重复的?

6 个答案:

答案 0 :(得分:3)

尝试在build.gradle中添加以下gradle选项。通过添加以下选项,您可以启用MultiDex支持和增量 dex支持。

 ...
   defaultConfig {
      ...
      multiDexEnabled true // Enabling multidex support.
   }
    ...
   dexOptions {
     //you can speed up your builds by turning on incremental dexing
           incremental = true;
     //you can specify the heap size for the dex process
           javaMaxHeapSize "4g" 
   }

在您的应用扩展Application课程时,您可以覆盖attachBaseContext() 方法并调用MultiDex.install(this)以启用multidex。

 @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

您还可以在stackoverflow上看到以下相关问题链接:

Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException:..non-zero exit value 3

Android java.exe finished with non-zero exit value 1

请参阅Building Apps with Over 65K Methods

答案 1 :(得分:2)

  

如何检查哪个包是重复的?

将以下内容添加到var progress = document.getElementById("dashes"); var sayings = [ "cash on the nail", "charley horse", "double cross", "fit as a fiddle", "hands down", "if the cap fits", "mumbo jumbo", "see red", "stone the crows", "thick and thin", ] sayings.toString(); var randomSaying = Math.floor(Math.random()*sayings.length); 文件中。

proguard_legacy.cfg

这不会混淆您的代码,您将在日志中看到包含错误的类或对象的真实姓名。

答案 2 :(得分:1)

我花了不少时间检查依赖树,删除了重复项。例如,我使用FastScrollRecylerView库,因此我不需要编译reyclerview的com.android.support版本。

gradle app:dependencies

我还在每个库的基础上仔细构建了我的proguard规则,搜索常见的配置等等。我让它工作了!

答案 3 :(得分:1)

您正在使用自定义ProGuard设置文件进行混淆/缩小,名为: proguard_legacy.cfg

该文件很可能包含一些不再与DEX处理兼容的规则。建议使用由Google提供的SDK中的默认ProGuard配置文件,并保证使用DEX处理。

您可以在已经发现(minifyEnabled false)的情况下全部关闭缩小,或者您可以尝试使用提供的默认ProGuard配置。对于后者,在gradle文件中更改此行:

proguardFiles 'proguard_legacy.cfg'

proguardFiles getDefaultProguardFile('proguard-android.txt')

SDK中还有另一个配置文件,名为&#39; proguard-android-optimize.txt &#39;,但这对于二进制文件的更改方式更为积极,所以它可能根本不起作用。

除了标准规则之外,您还可以添加更宽松或更严格的规则,方法是将这些规则添加到新的ProGuard配置中,并将其列在gradle文件中的默认规则旁边,例如:

proguardFiles getDefaultProguardFile('proguard-android.txt'),'my_proguard_rules.pro'

第二个文件中的任何规则都将添加到第一个规则的顶部。 (通常通过覆盖某些规则的行为。)

请注意:使用默认的ProGuard规则可能会以可能引发问题的方式更改您的代码(例如,方法或类被重命名或完全删除)。您的自定义配置文件中可以有关于必须保持不变的特定规则。如果不查看文件,很难说如何调整ProGuard配置。

您的应用的某些与安全相关的属性也可能会随着更改ProGuard规则而发生变化,因此,如果您的项目有与安全相关的注意事项,请在更改后对应用进行渗透/安全审核。

答案 4 :(得分:0)

最后,我发现“compile”com.squareup.retrofit2:converter-jackson:$ retrofit_version“”导致构建错误。

使用“gradle app:dependencies”,我们可以看到converter-jackson依赖于fastxml。所以将以下内容添加到proguard文件中,它可以工作!!!

-keep class com.fasterxml.** { *; }
-dontwarn com.fasterxml.**

如何找到确切的依赖包(我的意思是com.squareup.retrofit2:converter-jackson)?我只是逐个排除依赖项。我花了几个小时: - (

如果有人有更好的方法来查找依赖包,请告诉我。

答案 5 :(得分:-1)

minifyEnabled false文件中调试build.gradle