Android Studio 初试 Java 8

来源:互联网 发布:淘宝zara官方旗舰店 编辑:程序博客网 时间:2024/06/03 07:12

版本:
Android Studio 2.2.3
Gradle 3.2.1
Java 1.8.0_31
compileSdkVersion 25
buildToolsVersion 25.0.2

使用Java 8需要用到Jack工具链
因此在module中的build.gradle增加了如下配置:

defaultConfig {    ...    jackOptions {        enabled true  }}compileOptions {    sourceCompatibility JavaVersion.VERSION_1_8    targetCompatibility JavaVersion.VERSION_1_8}

Sync之后就能在代码中看到提示了
这里写图片描述

这里写图片描述

但是改用Jack进行编译之后打包就遇到了问题,debug包正常,而release包就会出现下面的报错

Information:Gradle tasks [:pub:assembleRelease]Error:com.android.jack.IllegalOptionsException: Error while parsing 'C:\..\pub\proguard-rules.pro':56Error:com.android.jack.antlr.runtime.RecognitionExceptionError:Execution failed for task ':pub:transformJackWithJackForRelease'.> com.android.build.api.transform.TransformException: com.android.jack.api.v01.ConfigurationException: Error while parsing 'C:\..\pub\proguard-rules.pro':56Information:BUILD FAILED

根据提示在proguard-rules.pro中找到问题出在这里

#忽略警告-ignorewarning

在看过Compiling with Jack之后了解到改用Jack之后proguard-rules.pro需作修改
这里写图片描述
把不支持的选项删掉之后再打包,出现了另一个报错

Information:Gradle tasks [:pub:assembleRelease]Error:Execution failed for task ':pub:transformJackWithJackForRelease'.> com.android.sched.scheduler.PlanError: 'SeedPrinter' need [OriginalNames, SeedMarker] but does not have [OriginalNames] in plan [JDefinedClassOrInterfaceAdapter: [OriginDigestAdder], PreProcessorApplier, MethodIdMerger, Remover, JDefinedClassOrInterfaceAdapter: [MethodIdDuplicateRemover], JDefinedClassOrInterfaceAdapter: [TypeGenericSignatureSplitter, TypeStringLiteralRefiner, SimpleNameRefiner, JMethodAdapter: [MethodGenericSignatureSplitter, ReflectionStringLiteralRefiner, MethodStringLiteralRefiner], JFieldAdapter: [FieldGenericSignatureSplitter, FieldStringLiteralRefiner]], JDefinedClassOrInterfaceAdapter: [JFieldAdapter: [FieldInitializerRemover, FieldContainerAnnotationMarkerAdder]], JDefinedClassOrInterfaceAdapter: [UsedEnumFieldCollector], JDefinedClassOrInterfaceAdapter: [VisibilityBridgeAdder, JMethodAdapter: [TryWithResourcesTransformer]], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [ImplicitBlocks, IncDecRemover, CompoundAssignmentRemover, ConcatRemover]], JDefinedClassOrInterfaceAdapter: [InnerAccessorGenerator], JDefinedClassOrInterfaceAdapter: [InnerAccessorAdder, JMethodAdapter: [FlowNormalizer, MethodContainerAnnotationMarkerAdder, SwitchStringSupport], JMethodAdapter: [FieldInitMethodCallRemover], FieldInitMethodRemover], JDefinedClassOrInterfaceAdapter: [SeedFinder, MultiDexAnnotationsFinder, RuntimeAnnotationFinder, AnnotatedFinder], JPackageAdapter: [SubClassOrInterfaceFinder], JDefinedClassOrInterfaceAdapter: [ShrinkAndMainDexTracer], JDefinedClassOrInterfaceAdapter: [TypeShrinker, JMethodAdapter: [MethodShrinker], JFieldAdapter: [FieldShrinker]], JDefinedClassOrInterfaceAdapter: [MainDexCollector], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [SwitchEnumSupport], UsedEnumFieldMarkerRemover, TypeContainerAnnotationMarkerAdder], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [EnumMappingMarkerRemover]], JPackageAdapter: [NameKeeper], ResourceRefiner, ResourceContentRefiner, Renamer, SourceFileRemover, JDefinedClassOrInterfaceAdapter: [TypeAnnotationRemover, LineNumberRemover, JFieldAdapter: [FieldAnnotationRemover], JMethodAdapter: [MethodAnnotationRemover, ParameterAnnotationRemover, LocalVariableGenericSignatureRemover, ThrownExceptionRemover, ParameterNameRemover, LocalVariableAndThisNameRemover]], JDefinedClassOrInterfaceAdapter: [JayceInLibraryWriterAll], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [DefaultBridgeInLambdaAdder]], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [BridgeInInterfaceRemover]], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [AndroidCompatibilityChecker]], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [LambdaCollector]], LambdaGroupClassCreator, JDefinedClassOrInterfaceAdapter: [LambdaGroupClassFinalizer], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [LambdaConverter]], JDefinedClassOrInterfaceAdapter: [TypeDependenciesCollector, FileDependenciesCollector], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [DynamicAssertionTransformer, NotSimplifier]], JDefinedClassOrInterfaceAdapter: [JFieldAdapter: [FieldInitializer], JMethodAdapter: [ConditionalAndOrRemover, BooleanTestTransformer, SplitNewInstance, MultiDimensionNewArrayRemover, InitInNewArrayRemover, PrimitiveClassTransformer, SynchronizeTransformer, NestedAssignRemover, IntersectionTypeRemover, UselessCaseRemover, UselessSwitchesRemover, TypeLegalizer, RopCastLegalizer, FinallyRemover, ExceptionRuntimeValueAdder, DefinitionMarkerAdder, ThreeAddressCodeBuilder, UselessCastRemover, DefinitionMarkerRemover, TryCatchRemover, ExpressionStatementLegalizer, EmptyClinitRemover]], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [DalvikProtectedInnerChecker]], TypeDependenciesInLibraryWriter, FileDependenciesInLibraryWriter, LibraryDependenciesInLibraryWriter, SeedPrinter, MappingPrinter, JDefinedClassOrInterfaceAdapter: [ReflectAnnotationsAdder, JMethodAdapter: [DefaultValueAnnotationAdder]], JDefinedClassOrInterfaceAdapter: [ClassDefItemBuilder, TypeContainerAnnotationAdder, ClassAnnotationBuilder], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [RefAsStatementRemover, CfgBuilder, DefinitionMarkerAdder, ReachingDefinitions, UsedVariableAdder, DefUsesAndUseDefsChainComputation, ConstantRefinerAndVariableRemover, UseDefsChainsSimplifier, DefUsesChainsSimplifier, UnusedDefinitionRemover, RefAsStatementRemover, CfgMarkerRemover, CfgBuilder, IfWithConstantSimplifier, UnusedLocalRemover, DefUsesAndUseDefsChainRemover, DefinitionMarkerRemover, UsedVariableRemover, ExpressionSimplifier, UselessIfRemover, CfgMarkerRemover, CfgBuilder]], JDefinedClassOrInterfaceAdapter: [JMethodAdapter: [CodeItemBuilder, CfgMarkerRemover, EncodedMethodBuilder, MethodContainerAnnotationAdder, MethodAnnotationBuilder, MethodBodyRemover]], JDefinedClassOrInterfaceAdapter: [JFieldAdapter: [FieldContainerAnnotationAdder, EncodedFieldBuilder, FieldAnnotationBuilder]], JDefinedClassOrInterfaceAdapter: [DexInLibraryWriterAll], Aborter, DexFileWriter, ResourceWriter, LibraryResourceWriter, LibraryMetaWriter]Information:BUILD FAILED

这下除了知道是transformJackWithJackForRelease这个task出了问题,其他啥都看不懂了,懵了。
放弃混淆就能成功打包,但还是想把代码作混淆处理,所以继续。
感觉问题还是出在proguard-rules.pro中,于是把里面的一项项删除打包删除打包,终于在删除下面这两项之后成功了。

#未混淆的类和成员-printseeds seeds.txt#混淆前后的映射-printmapping mapping.txt

另外现在的Android Studio已经不需要下面这个配置

shrinkResources true

添加了反而会报如下错误

Information:Gradle tasks [:pub:assembleRelease]Error:A problem was found with the configuration of task ':pub:packageRelease'.> File 'C:\..\pub\build\intermediates\res\resources-release-stripped.ap_' specified for property 'resourceFile' does not exist.Information:BUILD FAILED

好了,收工!

0 0
原创粉丝点击