caseConfig代码如下:(其他的配置)
<templateSet group="CASE-CONFIG">
<template name="caseGitnore" value="# Built application files #.apk *.ap_ *.aab # Files for the ART/Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ out/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Android Studio Navigation editor temp files .navigation/ # Android Studio captures folder captures/ # IntelliJ *.iml .idea/workspace.xml .idea/tasks.xml .idea/gradle.xml .idea/assetWizardSettings.xml .idea/dictionaries .idea/libraries .idea/caches .idea/misc.xml .idea/codeStyles/Project.xml # Android Studio 3 in .gitignore file. .idea/caches/build_file_checksums.ser .idea/modules.xml .idea/misc.xml .idea/codeStyles/ # Keystore files # Uncomment the following lines if you do not want to check your keystore files in. *.jks #*.keystore # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild # Google Services (e.g. APIs or Firebase) # google-services.json # Freeline freeline.py freeline/ freeline_project_description.json # fastlane fastlane/report.xml fastlane/Preview.html fastlane/screenshots fastlane/test_output fastlane/readme.md # Version control vcs.xml # lint lint/intermediates/ lint/generated/ lint/outputs/ lint/tmp/ # lint/reports/ class_files.txt" description="忽略文件" toReformat="false" toShortenFQNames="true">
<context>
<option name="GROOVY" value="false" />
<option name="HTML" value="false" />
<option name="JAVA_CODE" value="false" />
<option name="JSON" value="false" />
<option name="KOTLIN" value="false" />
<option name="OTHER" value="true" />
<option name="XML" value="false" />
<option name="c" value="false" />
<option name="cpp" value="false" />
</context>
</template>
<template name="caseProguard" value="#-------1.基本指令------- # 设置混淆的压缩比率 0 ~ 7 -optimizationpasses 5 # 混淆时不使用大小写混合,混淆后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 指定不去忽略非公共库的成员 -dontskipnonpubliclibraryclassmembers # 混淆时不做预校验 -dontpreverify # 混淆时不记录日志 -verbose # 忽略警告 -ignorewarning # 代码优化 -dontshrink # 不优化输入的类文件 -dontoptimize # 保留注解不混淆 -keepattributes *Annotation*,InnerClasses # 避免混淆泛型 -keepattributes Signature # 保留代码行号,方便异常信息的追踪 -keepattributes SourceFile,LineNumberTable # 混淆采用的算法 -optimizations !code/simplification/cast,!field/*,!class/merging/* # dump.txt文件列出apk包内所有class的内部结构 -dump class_files.txt # seeds.txt文件列出未混淆的类和成员 -printseeds seeds.txt # usage.txt文件列出从apk中删除的代码 -printusage unused.txt # mapping.txt文件列出混淆前后的映射 -printmapping mapping.txt #-------2.不需混淆的Android类------- -keep public class * extends android.app.Fragment -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.preference.Preference -keep public class * extends android.content.ContentProvider -keep public class * extends android.support.v4.** -keep public class * extends android.support.annotation.** -keep public class * extends android.support.v7.** -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class * extends android.view.View -keep public class com.android.vending.licensing.ILicensingService -keep class android.support.** {*;} #-------3.support-v4包------- -dontwarn android.support.v4.** -keep class android.support.v4.app.** { *; } -keep interface android.support.v4.app.** { *; } -keep class android.support.v4.** { *; } #-------4.support-v7包------- -dontwarn android.support.v7.** -keep class android.support.v7.internal.** { *; } -keep interface android.support.v7.internal.** { *; } -keep class android.support.v7.** { *; } #-------5.support design------- -dontwarn android.support.design.** -keep class android.support.design.** { *; } -keep interface android.support.design.** { *; } -keep public class android.support.design.R$* { *; } #-------6.避免混淆自定义控件类的 get/set 方法和构造函数------- -keep public class * extends android.view.View{ *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } #-------7.关闭Log日志------- -assumenosideeffects class android.util.Log { public static *** d(...); public static *** v(...); public static *** i(...); public static *** e(...); public static *** w(...); } #-------8.避免资源混淆------- -keep class **.R$* {*;} #-------9.layout中onclick方法(android:onclick="onClick")混淆------- -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } #-------10.onXXEvent 混淆------- -keepclassmembers class * { void *(*Event); } #-------11.避免混淆枚举类------- -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } #-------12.Natvie方法不混淆------- -keepclasseswithmembernames class * { native <methods>; } #-------13.避免Parcelable混淆------- -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #-------14.Serializable接口的子类中指定的某些成员变量和方法混淆------- -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient <fields>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } #-------15.WebView混淆配置------- -keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } -keepclassmembers class * extends android.webkit.webViewClient { public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); public boolean *(android.webkit.WebView, java.lang.String); } -keepclassmembers class * extends android.webkit.webViewClient { public void *(android.webkit.webView, jav.lang.String); } ############################################# # 项目中特殊处理部分 # ############################################# #内部成员和方法不混淆 #内部类不混淆 ############################################# #-----------处理反射类--------------- #...... #-----------处理js交互--------------- #...... #-----------处理实体类--------------- #...... #-----------处理第三方依赖库---------" description="通用混淆" toReformat="false" toShortenFQNames="true">
<context>
<option name="GROOVY" value="false" />
<option name="HTML" value="false" />
<option name="JAVA_CODE" value="false" />
<option name="JSON" value="false" />
<option name="KOTLIN" value="false" />
<option name="OTHER" value="true" />
<option name="XML" value="false" />
<option name="c" value="false" />
<option name="cpp" value="false" />
</context>
</template>
<template name="caseProperties" value="# Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.daemon=true // 开启线程守护,第一次编译时开线程,之后就不会再开了 org.gradle.jvmargs=-Xmx2048m org.gradle.parallel=true // 开启并行编译,相当于多条线程再走 org.gradle.configureondemand=true 启用新的孵化模式 android.injected.testOnly=false # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true # Kotlin code style for this project: "official" or "obsolete": PROP_APP_ABI=armeabi-v7a kotlin.code.style=official KEY_PASSWORD_QRCODE=qrcode KEY_ALIAS_QRCODE=qrcode STORE_PASSWORD_QRCODE=qrcode STORE_FILE_QRCODE=../qrcode20190328.jks" description="签名配置" toReformat="false" toShortenFQNames="true">
<context>
<option name="GROOVY" value="false" />
<option name="HTML" value="false" />
<option name="JAVA_CODE" value="false" />
<option name="JSON" value="false" />
<option name="KOTLIN" value="false" />
<option name="OTHER" value="true" />
<option name="XML" value="false" />
<option name="c" value="false" />
<option name="cpp" value="false" />
</context>
</template>
<template name="caseBintray" value="//☆☆☆第一句放到Project目录的dependencies中☆☆☆ classpath 'com.novoda:bintray-release:0.9' //Bintray ①引用 apply plugin: 'com.novoda.bintray-release' //Bintray ②引用 android { //Bintray ③忽略错误 lintOptions { abortOnError false } } //Bintray ④中文注释处理 tasks.withType(Javadoc).all { enabled = false } //Bintray ⑤上传配置 publish { userOrg = 'case' //账户显示名称 repoName = 'android' //账户建的Repository(不填写这个参数默认上传到Maven) uploadName = "QRCode" //项目在Maven中显示的名称 groupId = 'com.cc' //项目所在组 artifactId = 'qrcode' //项目名称 publishVersion = '1.0.0' //项目版本 desc = 'this is a library for easy user qrcode create and scan' //uploadName对应的描述,中文会乱码 website = 'https://github.com/caiyoufei/CCQrcode' //网址,随意 licences = ['Apache-2.0'] //固定 } //Bintary ⑥执行上传 BINTRAY_USERNAME和BINTRAY_KEY需要改为自己的账户信息 //gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false" description="发布到Jcenter" toReformat="false" toShortenFQNames="true">
<context>
<option name="HTML" value="false" />
<option name="JAVA_CODE" value="false" />
<option name="JSON" value="false" />
<option name="KOTLIN" value="false" />
<option name="OTHER" value="true" />
<option name="XML" value="false" />
<option name="c" value="false" />
<option name="cpp" value="false" />
</context>
</template>
<template name="caseConfig" value="//★修改version后需要将versionCode重置为从1开始★ def version_Name = "1.0.0" //只能是X.X.X格式,X为数字 //build版本从1开始:偶数测试版、奇数正式版 def version_Build = 1 //只能是1-999的数字(预想999次build应该可以发版) /**********************************************************************打包后续事项********************************************************************** 1.打包(使用V1签名)完毕后,需要使用360加固助手进行加固和多渠道操作 2.设置签名:选择应用加固-签名设置-添加签名后勾选启用自动签名 3.加固助手多渠道配置:将Channel_Info.txt文件中的Channel信息复制到txt文件中,选择应用加固-多渠道设置-导入摸板-勾选启用多渠道打包 4.设置生成包的地址:选择应用加固-基础设置-选择加固包的输出路径 5.加固和多渠道:选择应用加固-添加应用-等待加固和多渠道整个流程完成 6.查看加固情况:选择应用加固-右键加固包-选择任务详情-即可查看加固情况 7.手动设置渠道和签名(当遇到有加固失败的情况,就需要手动设置渠道和签名): ①选择失败的渠道,将Channel_Info.txt文件中对应的Channel信息复制到新的txt文件中 ②选择工具包-渠道打包-自己选择APK和输出路径(选择加固后没有渠道的包,结尾为_jiagu_sign.apk)-使用多渠道配置文件(刚才自己新建的txt)-生成渠道包 ③选择工具包-签名APK-自己选择APK和输出路径(选择第②步生成的渠道包)-使用已配置的签名(V1)-开始签名-->完成失败APK的签名 *******************************************************************************************************************************************************/ //默认显示的version_Code信息为:三位之前表示版本号、后三位表示当前版本的build次数 def version_Code = (version_Name.replace(".", "")).toInteger() * 1000 + version_Build ext { android = [ applicationId: "com.aimycode.android", compileSdkVersion: 28, minSdkVersion: 21, targetSdkVersion: 21, versionName: version_Name, versionCode: version_Code, buildTime: new Date().format("yyyyMMdd"), //编译日期 computer: Math.abs((System.getProperty("user.name") + "@" + InetAddress.localHost.hostName).hashCode()), ] } " description="全局配置" toReformat="false" toShortenFQNames="true">
<context>
<option name="GROOVY" value="true" />
</context>
</template>
<template name="caseAndRes" value="apply plugin: 'AndResGuard' andResGuard { mappingFile = null use7zip = true useSign = true keepRoot = false compressFilePattern = [ "*.png", "*.jpg", "*.jpeg", "*.gif", "resources.arsc" ] whiteList = [ // your icon "R.mipmap.ic_launcher", // for fabric "R.string.com.crashlytics.*", // for umeng update "R.string.tb_*", "R.layout.tb_*", "R.drawable.tb_*", "R.drawable.u1*", "R.drawable.u2*", "R.color.tb_*", // umeng share for sina "R.drawable.sina*", // for google-services.json "R.string.google_app_id", "R.string.gcm_defaultSenderId", "R.string.default_web_client_id", "R.string.ga_trackingId", "R.string.firebase_database_url", "R.string.google_api_key", "R.string.google_crash_reporting_api_key", //友盟 "R.anim.umeng*", "R.string.umeng*", "R.string.UM*", "R.string.tb_*", "R.layout.umeng*", "R.layout.socialize_*", "R.layout.*messager*", "R.layout.tb_*", "R.color.umeng*", "R.color.tb_*", "R.style.*UM*", "R.style.umeng*", "R.drawable.umeng*", "R.drawable.tb_*", "R.drawable.sina*", "R.drawable.qq_*", "R.drawable.tb_*", "R.id.umeng*", "R.id.*messager*", "R.id.progress_bar_parent", "R.id.socialize_*", "R.id.webView", //融云 "R.drawable.u*", "R.drawable.rc_*", "R.string.rc_*", "R.layout.rc_*", "R.color.rc_*", "R.id.rc_*", "R.style.rc_*", "R.dimen.rc_*", "R.array.rc_*", //Huawei push "R.string.hms_update_title", //getIdentifier "R.dimen.status_bar_height", "R.dimen.navigation_bar_height", "R.array.message_rc_emoji_*", "R.string.VideoView_error_*", ] compressFilePattern = [ "*.png", "*.jpg", "*.jpeg", "*.gif", "resources.arsc" ] sevenzip { artifact = 'com.tencent.mm:SevenZip:1.2.15' //path = "/usr/local/bin/7za" } /** * 可选: 如果不设置则会默认覆盖assemble输出的apk **/ // System.out.print(variant) finalApkBackupPath = "${project.rootDir}/APK/精简扫码" + "_build${String.valueOf(rootProject.ext.android.versionCode)}" + "_${String.valueOf(rootProject.ext.android.buildTime)}" + ".apk" }" description="资源压缩配置" toReformat="false" toShortenFQNames="true">
<context>
<option name="GROOVY" value="true" />
</context>
</template>
<template name="caseAppGradle" value="apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply from: 'and_res_guard.gradle' android { compileSdkVersion rootProject.ext.android.compileSdkVersion defaultConfig { applicationId rootProject.ext.android.applicationId minSdkVersion rootProject.ext.android.minSdkVersion targetSdkVersion rootProject.ext.android.targetSdkVersion versionCode rootProject.ext.android.versionCode versionName rootProject.ext.android.versionName multiDexEnabled true resConfigs "zh", "en" //保留中文和英文资源 ndk { abiFilters 'armeabi-v7a' //, 'arm64-v8a' } } flavorDimensions "default" //公开发布商店渠道配置 productFlavors { //程序员本地跑的包(只直接在AS中跑,不打包给其他人) Developer { dimension "default" } //打包后★必须使用多渠道设置渠道★(不直接跑包,打包时使用) Package { dimension "default" } } //配置不同版本的keystore signingConfigs { debug { storeFile file(STORE_FILE_QRCODE) storePassword STORE_PASSWORD_QRCODE keyAlias KEY_ALIAS_QRCODE keyPassword KEY_PASSWORD_QRCODE } release { storeFile file(STORE_FILE_QRCODE) storePassword STORE_PASSWORD_QRCODE keyAlias KEY_ALIAS_QRCODE keyPassword KEY_PASSWORD_QRCODE } } buildTypes { debug { zipAlignEnabled true shrinkResources true minifyEnabled true signingConfig signingConfigs.debug proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } release { zipAlignEnabled true shrinkResources true minifyEnabled true signingConfig signingConfigs.release proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } android.applicationVariants.all { variant -> variant.outputs.all { //名称 String appName = "" String path = getProjectDir().getPath() + "/src/main/res/values/strings.xml" new XmlSlurper().parse(path)."string".find { name -> if (name."@name" == "app_name") { appName = name return true } } //正式版还是测试版 String typeName = buildType.name typeName = typeName.substring(0, 1).toUpperCase() + typeName.substring(1).toLowerCase() //build名称 String buildVer = String.valueOf(rootProject.ext.android.versionCode) String buildName = "_build" + buildVer //编译日期 String buildTime = "_" + String.valueOf(rootProject.ext.android.buildTime) //打包的电脑 String computer = "_" + String.valueOf(rootProject.ext.android.computer) //后缀名 String suffix = ".apk" //生成输出文件名称 outputFileName = "${appName}${typeName}${buildName}${buildTime}${computer}${suffix}" } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" }" description="APP的Gradle配置" toReformat="false" toShortenFQNames="true">
<context>
<option name="GROOVY" value="true" />
</context>
</template>
<template name="caseCodeStyle" value="<component name="ProjectCodeStyleConfiguration"> <code_scheme name="Project" version="173"> <option name="USE_SAME_INDENTS" value="true" /> <option name="IGNORE_SAME_INDENTS_FOR_LANGUAGES" value="true" /> <option name="OTHER_INDENT_OPTIONS"> <value> <option name="INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="4" /> <option name="TAB_SIZE" value="2" /> </value> </option> <option name="RIGHT_MARGIN" value="100" /> <AndroidXmlCodeStyleSettings> <option name="USE_CUSTOM_SETTINGS" value="true" /> <option name="LAYOUT_SETTINGS"> <value> <option name="INSERT_BLANK_LINE_BEFORE_TAG" value="false" /> <option name="INSERT_LINE_BREAK_AFTER_LAST_ATTRIBUTE" value="true" /> </value> </option> </AndroidXmlCodeStyleSettings> <GroovyCodeStyleSettings> <option name="ALIGN_MULTILINE_LIST_OR_MAP" value="false" /> <option name="ALIGN_NAMED_ARGS_IN_MAP" value="false" /> </GroovyCodeStyleSettings> <JavaCodeStyleSettings> <option name="FIELD_NAME_PREFIX" value="m" /> <option name="STATIC_FIELD_NAME_PREFIX" value="s" /> <option name="CLASS_NAMES_IN_JAVADOC" value="3" /> <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="3" /> <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND"> <value /> </option> <option name="IMPORT_LAYOUT_TABLE"> <value> <package name="" withSubpackages="true" static="false" /> <emptyLine /> <package name="" withSubpackages="true" static="true" /> </value> </option> <option name="JD_ALIGN_PARAM_COMMENTS" value="false" /> <option name="JD_ALIGN_EXCEPTION_COMMENTS" value="false" /> <option name="JD_P_AT_EMPTY_LINES" value="false" /> <option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" /> <option name="JD_KEEP_EMPTY_PARAMETER" value="false" /> <option name="JD_KEEP_EMPTY_RETURN" value="false" /> <option name="JD_PRESERVE_LINE_FEEDS" value="true" /> </JavaCodeStyleSettings> <JetCodeStyleSettings> <option name="PACKAGES_TO_USE_STAR_IMPORTS"> <value /> </option> <option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="3" /> <option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" /> <option name="IMPORT_NESTED_CLASSES" value="true" /> <option name="CONTINUATION_INDENT_IN_PARAMETER_LISTS" value="false" /> <option name="CONTINUATION_INDENT_FOR_EXPRESSION_BODIES" value="false" /> <option name="WRAP_EXPRESSION_BODY_FUNCTIONS" value="1" /> <option name="IF_RPAREN_ON_NEW_LINE" value="true" /> </JetCodeStyleSettings> <XML> <option name="XML_ALIGN_ATTRIBUTES" value="false" /> <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" /> </XML> <ADDITIONAL_INDENT_OPTIONS fileType="php"> <option name="INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="4" /> <option name="TAB_SIZE" value="2" /> </ADDITIONAL_INDENT_OPTIONS> <ADDITIONAL_INDENT_OPTIONS fileType="scala"> <option name="INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="2" /> <option name="TAB_SIZE" value="2" /> </ADDITIONAL_INDENT_OPTIONS> <codeStyleSettings language="CSS"> <indentOptions> <option name="INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="4" /> <option name="TAB_SIZE" value="2" /> </indentOptions> </codeStyleSettings> <codeStyleSettings language="CoffeeScript"> <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" /> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> <option name="METHOD_PARAMETERS_WRAP" value="1" /> </codeStyleSettings> <codeStyleSettings language="Groovy"> <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" /> <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" /> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" /> <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> <option name="ALIGN_MULTILINE_FOR" value="false" /> <option name="CALL_PARAMETERS_WRAP" value="1" /> <option name="METHOD_PARAMETERS_WRAP" value="1" /> <option name="EXTENDS_LIST_WRAP" value="1" /> <option name="THROWS_LIST_WRAP" value="1" /> <option name="EXTENDS_KEYWORD_WRAP" value="1" /> <option name="THROWS_KEYWORD_WRAP" value="1" /> <option name="METHOD_CALL_CHAIN_WRAP" value="5" /> <option name="BINARY_OPERATION_WRAP" value="5" /> <option name="TERNARY_OPERATION_WRAP" value="1" /> <option name="FOR_STATEMENT_WRAP" value="1" /> <option name="ASSIGNMENT_WRAP" value="1" /> <option name="ASSERT_STATEMENT_WRAP" value="1" /> <option name="IF_BRACE_FORCE" value="1" /> <option name="WHILE_BRACE_FORCE" value="1" /> <option name="METHOD_ANNOTATION_WRAP" value="1" /> <option name="CLASS_ANNOTATION_WRAP" value="1" /> <option name="FIELD_ANNOTATION_WRAP" value="1" /> <option name="PARAMETER_ANNOTATION_WRAP" value="1" /> <option name="VARIABLE_ANNOTATION_WRAP" value="1" /> <indentOptions> <option name="INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="4" /> <option name="TAB_SIZE" value="2" /> </indentOptions> </codeStyleSettings> <codeStyleSettings language="JAVA"> <option name="LINE_COMMENT_AT_FIRST_COLUMN" value="false" /> <option name="BLOCK_COMMENT_AT_FIRST_COLUMN" value="false" /> <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" /> <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" /> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" /> <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> <option name="ALIGN_MULTILINE_FOR" value="false" /> <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" /> <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" /> <option name="CALL_PARAMETERS_WRAP" value="1" /> <option name="METHOD_PARAMETERS_WRAP" value="1" /> <option name="RESOURCE_LIST_WRAP" value="1" /> <option name="EXTENDS_LIST_WRAP" value="1" /> <option name="THROWS_LIST_WRAP" value="1" /> <option name="EXTENDS_KEYWORD_WRAP" value="1" /> <option name="THROWS_KEYWORD_WRAP" value="1" /> <option name="METHOD_CALL_CHAIN_WRAP" value="5" /> <option name="BINARY_OPERATION_WRAP" value="5" /> <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" /> <option name="TERNARY_OPERATION_WRAP" value="1" /> <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" /> <option name="FOR_STATEMENT_WRAP" value="1" /> <option name="ARRAY_INITIALIZER_WRAP" value="1" /> <option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" /> <option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" /> <option name="ASSIGNMENT_WRAP" value="1" /> <option name="WRAP_COMMENTS" value="true" /> <option name="ASSERT_STATEMENT_WRAP" value="1" /> <option name="IF_BRACE_FORCE" value="1" /> <option name="DOWHILE_BRACE_FORCE" value="1" /> <option name="WHILE_BRACE_FORCE" value="1" /> <option name="METHOD_ANNOTATION_WRAP" value="1" /> <option name="CLASS_ANNOTATION_WRAP" value="1" /> <option name="FIELD_ANNOTATION_WRAP" value="1" /> <option name="PARAMETER_ANNOTATION_WRAP" value="1" /> <option name="VARIABLE_ANNOTATION_WRAP" value="1" /> <indentOptions> <option name="INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="4" /> <option name="TAB_SIZE" value="2" /> </indentOptions> </codeStyleSettings> <codeStyleSettings language="JSON"> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> </codeStyleSettings> <codeStyleSettings language="JavaScript"> <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" /> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> <option name="ALIGN_MULTILINE_FOR" value="false" /> <option name="CALL_PARAMETERS_WRAP" value="1" /> <option name="METHOD_PARAMETERS_WRAP" value="1" /> <option name="BINARY_OPERATION_WRAP" value="5" /> <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" /> <option name="TERNARY_OPERATION_WRAP" value="1" /> <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" /> <option name="FOR_STATEMENT_WRAP" value="1" /> <option name="ARRAY_INITIALIZER_WRAP" value="1" /> <option name="ASSIGNMENT_WRAP" value="1" /> <option name="IF_BRACE_FORCE" value="1" /> <option name="DOWHILE_BRACE_FORCE" value="1" /> <option name="WHILE_BRACE_FORCE" value="1" /> <indentOptions> <option name="INDENT_SIZE" value="2" /> <option name="TAB_SIZE" value="2" /> </indentOptions> </codeStyleSettings> <codeStyleSettings language="SQL"> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> </codeStyleSettings> <codeStyleSettings language="TypeScript"> <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" /> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> <option name="ALIGN_MULTILINE_FOR" value="false" /> <option name="CALL_PARAMETERS_WRAP" value="1" /> <option name="METHOD_PARAMETERS_WRAP" value="1" /> <option name="EXTENDS_LIST_WRAP" value="1" /> <option name="EXTENDS_KEYWORD_WRAP" value="1" /> <option name="BINARY_OPERATION_WRAP" value="5" /> <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" /> <option name="TERNARY_OPERATION_WRAP" value="1" /> <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" /> <option name="FOR_STATEMENT_WRAP" value="1" /> <option name="ARRAY_INITIALIZER_WRAP" value="1" /> <option name="ASSIGNMENT_WRAP" value="1" /> <option name="WRAP_COMMENTS" value="true" /> <option name="IF_BRACE_FORCE" value="1" /> <option name="DOWHILE_BRACE_FORCE" value="1" /> <option name="WHILE_BRACE_FORCE" value="1" /> </codeStyleSettings> <codeStyleSettings language="XML"> <indentOptions> <option name="INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="4" /> <option name="TAB_SIZE" value="2" /> </indentOptions> <arrangement> <rules> <section> <rule> <match> <NAME>class</NAME> </match> </rule> </section> <section> <rule> <match> <NAME>layout</NAME> </match> </rule> </section> <section> <rule> <match> <NAME>xmlns:android</NAME> </match> </rule> </section> <section> <rule> <match> <NAME>xmlns:.*</NAME> </match> <order>BY_NAME</order> </rule> </section> <section> <rule> <match> <AND> <NAME>.*:id</NAME> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> </AND> </match> </rule> </section> <section> <rule> <match> <AND> <NAME>.*:name</NAME> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> </AND> </match> </rule> </section> <section> <rule> <match> <AND> <NAME>.*:layout_width</NAME> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> </AND> </match> </rule> </section> <section> <rule> <match> <AND> <NAME>.*:layout_height</NAME> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> </AND> </match> </rule> </section> <section> <rule> <match> <AND> <NAME>.*:layout_.*</NAME> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> </AND> </match> <order>BY_NAME</order> </rule> </section> <section> <rule> <match> <AND> <NAME>.*</NAME> <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> </AND> </match> <order>BY_NAME</order> </rule> </section> <section> <rule> <match> <AND> <NAME>app:layout_.*</NAME> <XML_NAMESPACE>http://schemas.android.com/apk/res-auto</XML_NAMESPACE> </AND> </match> <order>BY_NAME</order> </rule> </section> <section> <rule> <match> <NAME>.*(?&lt;!style)$</NAME> </match> <order>BY_NAME</order> </rule> </section> <section> <rule> <match> <NAME>style</NAME> </match> </rule> </section> </rules> </arrangement> </codeStyleSettings> <codeStyleSettings language="kotlin"> <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" /> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" /> <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> <option name="CALL_PARAMETERS_WRAP" value="1" /> <option name="CALL_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" /> <option name="CALL_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" /> <option name="METHOD_PARAMETERS_WRAP" value="2" /> <option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" /> <option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" /> <option name="EXTENDS_LIST_WRAP" value="5" /> <option name="METHOD_CALL_CHAIN_WRAP" value="2" /> <option name="ASSIGNMENT_WRAP" value="1" /> <option name="METHOD_ANNOTATION_WRAP" value="1" /> <option name="FIELD_ANNOTATION_WRAP" value="1" /> <option name="ENUM_CONSTANTS_WRAP" value="2" /> <indentOptions> <option name="INDENT_SIZE" value="2" /> <option name="CONTINUATION_INDENT_SIZE" value="4" /> <option name="TAB_SIZE" value="2" /> </indentOptions> </codeStyleSettings> </code_scheme> </component>" description="Project代码风格" toReformat="false" toShortenFQNames="true">
<context>
<option name="XML" value="true" />
</context>
</template>
</templateSet>