Android Studio 初试 Java 8

版本:
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':56
Error:com.android.jack.antlr.runtime.RecognitionException
Error: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':56
Information: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

好了,收工!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值