尝试理解proguard(实际上我只是想让它工作),我从一个非常简单的hello world应用程序开始。到现在为止还挺好。然后我添加了我的谷歌云端点。没有其他的。一旦我添加了端点,proguard会抛出异常:
proguard-rules.pro
所以我遇到问题的唯一原因是因为云端点I add using android studio。所以我的问题是如何为proguard配置Google Cloud Android应用程序?
由于来自Proguard的失败消息,我将-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
-keep class com.google.api.** { public *; }
-dontwarn com.google.api.**
-keep class com.google.common.** { public *; }
-dontwarn com.google.common.**
-keep class com.mycompany.cloud.Cloud.** { *; }
-dontwarn com.google.android.gms.**
-dontwarn com.google.common.cache.**
-dontwarn com.google.common.primitives.**
-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
public static final *** NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}
从没有任何内容更改为具有以下内容:
Unexpected error while evaluating instruction:
Class = [com/fasterxml/jackson/core/JsonFactory$Feature]
Method = [collectDefaults()I]
Instruction = [22] getfield #8
Exception = [java.lang.IllegalArgumentException] (Value "i" is not a reference value [proguard.evaluation.value.UnknownIntegerValue])
Unexpected error while performing partial evaluation:
Class = [com/fasterxml/jackson/core/JsonFactory$Feature]
Method = [collectDefaults()I]
Exception = [java.lang.IllegalArgumentException] (Value "i" is not a reference value [proguard.evaluation.value.UnknownIntegerValue])
Exception while processing task
java.lang.IllegalArgumentException: Value "i" is not a reference value [proguard.evaluation.value.UnknownIntegerValue]
at proguard.evaluation.value.Value.referenceValue(Value.java:97)
at proguard.evaluation.Stack.apop(Stack.java:330)
at proguard.evaluation.BasicInvocationUnit.visitFieldrefConstant(BasicInvocationUnit.java:197)
at proguard.classfile.constant.FieldrefConstant.accept(FieldrefConstant.java:69)
at proguard.classfile.ProgramClass.constantPoolEntryAccept(ProgramClass.java:465)
at proguard.evaluation.BasicInvocationUnit.invokeMember(BasicInvocationUnit.java:179)
at proguard.evaluation.Processor.visitConstantInstruction(Processor.java:591)
at proguard.classfile.instruction.ConstantInstruction.accept(ConstantInstruction.java:157)
at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:761)
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:609)
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:567)
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:271)
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:188)
at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:81)
at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)
at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:92)
at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:73)
at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:516)
at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47)
at proguard.classfile.visitor.ClassAccessFilter.visitProgramClass(ClassAccessFilter.java:67)
at proguard.classfile.ProgramClass.accept(ProgramClass.java:358)
at proguard.classfile.ClassPool.classesAccept(ClassPool.java:124)
at proguard.optimize.Optimizer.execute(Optimizer.java:462)
at proguard.ProGuard.optimize(ProGuard.java:328)
at proguard.ProGuard.execute(ProGuard.java:127)
at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074)
at com.android.build.gradle.tasks.AndroidProGuardTask.doMinification(AndroidProGuardTask.java:139)
at com.android.build.gradle.tasks.AndroidProGuardTask$1.run(AndroidProGuardTask.java:115)
at com.android.builder.tasks.Job.runTask(Job.java:48)
at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41)
at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:227)
at java.lang.Thread.run(Thread.java:744)
现在,proguard崩溃了另外一条消息
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
更新 Gradle文件:
buildscript { 存储库{ maven {url&#39; https://maven.fabric.io/public&#39; } }
defaultConfig {
applicationId "com.mycomp.android"
minSdkVersion 14
targetSdkVersion 23
versionCode 11
versionName "0.0.11"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
zipAlignEnabled true
}
}
dexOptions {
incremental true
javaMaxHeapSize "4g"
preDexLibraries = false
}
} apply plugin:&#39; com.android.application&#39; 申请插件:&#39; io.fabric&#39; 申请插件:&#39; com.google.gms.google-services&#39;
知识库{ maven {url&#39; https://maven.fabric.io/public&#39; } }
android { compileSdkVersion 23 buildToolsVersion&#34; 23.0.1&#34;
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(path: ':myendpoint', configuration: 'android-endpoints')
compile('com.twitter.sdk.android:twitter:1.9.0@aar') {
transitive = true;
}
compile 'com.android.support:multidex:1.0.0'
compile 'com.android.support:design:23.0.1'
compile 'com.android.support:recyclerview-v7:23.0.1'
compile 'com.android.support:cardview-v7:23.0.1'
compile 'com.google.android.gms:play-services-analytics:8.1.0'
compile 'com.squareup.okhttp:okhttp:2.5.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.path:android-priority-jobqueue:1.1.2'
compile 'com.google.android.gms:play-services-gcm:8.1.0'
compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'com.google.android.gms:play-services-location:8.1.0'
compile 'com.google.android.gms:play-services-ads:8.1.0'
compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') {
transitive = true;
}
}
}
<xsl:template match="tag2/@id[.=../../@id]">
<xsl:attribute name="{name()}">
<xsl:value-of select="concat(., 'D')"/>
</xsl:attribute>
</xsl:template>