在调试生成中运行的添加行未在签名生成中运行



生成签名APK时的奇怪行为,在调试构建中运行的添加行没有在签名构建中运行,我真的需要一些帮助。

apply plugin: 'com.android.application'
android {
    compileSdkVersion 20
    buildToolsVersion "23.0.3"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 20
        versionCode 94
        versionName "2.4.40"
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    "Build -${variant.versionName}.apk")
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
    }
}
dependencies {
    compile fileTree(dir: 'libs')
    compile project(':SalesforceSDK')
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'org.roboguice:roboguice:2.0'
    compile 'com.android.support:support-v4:20.+'
    compile ('ch.acra:acra:4.5.0'){
        exclude group: 'org.json'
    }
}

我向服务添加了几行,以测试值是否正确,但我可以看到,我添加的行根本没有运行。我修改了一条有效的日志行。

我更新的代码

protected <T extends ResponseItem> void functionName(BaseResponse<T> response, Uri uri) {
        Log.d(TAG, "saveOrUpdate"); // did not run
.
.
.
Log.v(getClass().getName(), "Processed one row. 1"); showed correctly with added "1"
.
.
.
}

这是因为您的ProGuard设置正在删除构建的"Release"版本的所有"Log"函数。

你应该检查你的ProGuard文件,看看你是否发现了这样或这样的行:

-assumenosideeffects class android.util.Log {
   public static boolean isLoggable(java.lang.String, int);
   public static int v(...);
   public static int i(...);
   public static int w(...);
   public static int d(...);
   public static int e(...);
}

注意:请记住,您不应该将Signed APK上的日志输出发布到例如Google Play Store。

最新更新