我正在Android中构建一个应用程序,这是build.gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "myApp"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile project(':geth')
compile 'com.android.volley:volley:1.0.0'
compile 'com.google.android.gms:play-services-maps:10.0.1'
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:support-v4:25.1.0'
compile 'com.android.support:design:25.1.0'
compile 'com.android.support:multidex:1.0.1'
compile 'org.web3j:core-android:1.1.0'
testCompile 'junit:junit:4.12'
}
当我尝试构建我的应用时,我收到以下警告,导致构建失败:
我应该为这些警告添加-dontwarn规则吗?是什么导致他们?
由于67个警告或最后一个警告,构建是否失败:
"有1个未解析的对库类成员的引用。 您可能需要更新库版本。"
感谢。
答案 0 :(得分:1)
问题在于Proguard的链接问题。 ProGuard优化字节码,删除未使用的代码指令,并使用短名称对剩余的类,字段和方法进行模糊处理。混淆的代码使您的APK难以进行逆向工程,这在您的应用使用安全敏感功能时尤为重要
有关proguard的更多信息,请点击此处: https://jsfiddle.net/767psdwt
build.gradle中使用的每个库的proguard特定规则应放在“proguard-rules.pro”文件中,如屏幕截图所示。
https://developer.android.com/studio/build/shrink-code.html
注意:可以更改proguard文件。
遵守要写的规则。
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keep class com.android.volley.** { *; }
-keep interface com.android.volley.** { *; }
-keep class org.apache.commons.logging.**
-keepattributes *Annotation*
-dontwarn org.apache.**
-keepattributes Annotation,EnclosingMethod,Signature
-keepnames class com.fasterxml.jackson.* { ; }
-dontwarn com.fasterxml.jackson.databind.
-keep class org.codehaus.* { ; }
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility {
public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
-keep public class your.class.* {
public void set_(_);
public ** get*();
}
答案 1 :(得分:0)
这不是一个问题。这些问题是由ProGuard引起的。您需要修复ProGuard配置文件。
请参阅以下链接以获取更多帮助:
答案 2 :(得分:0)
你必须使用以下内容。
-dontwarn com.squareup.**
-dontwarn com.fasterxml.**
以及导致警告的类。这些类可能是自我混淆的,所以你不需要对它们进行保护。希望这对你有用。