diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fa47c94..b7e8071 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -124,15 +124,17 @@ task("downloadGeoFiles") { geoFilesUrls.forEach { (downloadUrl, outputFileName) -> val url = URL(downloadUrl) val outputPath = file("$geoFilesDownloadDir/$outputFileName") -// if (!outputPath.exists()) { - outputPath.parentFile.mkdirs() - url.openStream().use { input -> - Files.copy(input, outputPath.toPath(), StandardCopyOption.REPLACE_EXISTING) - println("$outputFileName downloaded to $outputPath") + if (!outputPath.exists()) { + outputPath.parentFile.mkdirs() + url.openStream().use { input -> + Files.copy(input, outputPath.toPath(), StandardCopyOption.REPLACE_EXISTING) + println("$outputFileName downloaded to $outputPath") + } + } else { + println("$outputFileName exists $outputPath") + //如果存在就从该文件复制 + } -// }else{ -// println("$outputFileName exists $outputPath") -// } } } } @@ -160,9 +162,7 @@ android { } } sourceSets.all { - jniLibs.srcDir("src/main/jniLibs") - } } repositories { diff --git a/app/src/main/libs/common.aar b/app/src/main/libs/common.aar index e09efce..77937b4 100644 Binary files a/app/src/main/libs/common.aar and b/app/src/main/libs/common.aar differ diff --git a/proguard-rules.pro b/proguard-rules.pro new file mode 100644 index 0000000..78e4e64 --- /dev/null +++ b/proguard-rules.pro @@ -0,0 +1,278 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +# 屏蔽警告 +-ignorewarnings + +# 指定代码的压缩级别 +-optimizationpasses 5 + +# 不忽略库中的非public的类成员 +-dontskipnonpubliclibraryclassmembers + +# google推荐算法 +-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* + +# 避免混淆Annotation、内部类、泛型、匿名类 +-keepattributes *Annotation*,InnerClasses,Signature,EnclosingMethod + +# 抛出异常时保留代码行号 +-keepattributes SourceFile,LineNumberTable + +# 保持四大组件 +-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.content.ContentProvider +-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 + +# 保持support下的所有类及其内部类 +-keep class android.support.** {*;} + +# 保留继承的 +-keep public class * extends android.support.v4.** +-keep public class * extends android.support.v7.** +-keep public class * extends android.support.annotation.** + +# 保持自定义控件 +-keep public class * extends android.view.View{ + *** get*(); + void set*(***); + public (android.content.Context); + public (android.content.Context, android.util.AttributeSet); + public (android.content.Context, android.util.AttributeSet, int); +} + +# 保持所有实现 Serializable 接口的类成员 +-keepclassmembers class * implements java.io.Serializable { + static final long serialVersionUID; + private static final java.io.ObjectStreamField[] serialPersistentFields; + private void writeObject(java.io.ObjectOutputStream); + private void readObject(java.io.ObjectInputStream); + java.lang.Object writeReplace(); + java.lang.Object readResolve(); +} + + +-keep class com.github.shadowsocks.net.http.entity.**{*;} + +#kotlin +-keep class kotlin.** { *; } +-keep class kotlin.Metadata { *; } +-dontwarn kotlin.** +-keepclassmembers class **$WhenMappings { + ; +} +-keepclassmembers class kotlin.Metadata { + public ; +} +-assumenosideeffects class kotlin.jvm.internal.Intrinsics { + static void checkParameterIsNotNull(java.lang.Object, java.lang.String); +} + +-keepclasseswithmembernames class * { + native ; +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} +-keepclassmembers class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} +-keep class **.R$* {*;} +-keepclassmembers enum * { *;} + + +#logger +-keep class com.orhanobut.logger.**{*;} + +############################################ retrofit2 +# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and +# EnclosingMethod is required to use InnerClasses. +-keepattributes Signature, InnerClasses, EnclosingMethod + +# Retrofit does reflection on method and parameter annotations. +-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations + +# Retain service method parameters when optimizing. +-keepclassmembers,allowshrinking,allowobfuscation interface * { + @retrofit2.http.* ; +} + +# Ignore annotation used for build tooling. +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement + +# Ignore JSR 305 annotations for embedding nullability information. +-dontwarn javax.annotation.** + +# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath. +-dontwarn kotlin.Unit + +# Top-level functions that can only be used by Kotlin. +-dontwarn retrofit2.KotlinExtensions +-dontwarn retrofit2.KotlinExtensions$* + +# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy +# and replaces all potential values with null. Explicitly keeping the interfaces prevents this. +-if interface * { @retrofit2.http.* ; } +-keep,allowobfuscation interface <1> +############################################ retrofit2 + +############################################ okhttp +# JSR 305 annotations are for embedding nullability information. +-dontwarn javax.annotation.** + +# A resource is loaded with a relative path so the package of this class must be preserved. +-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase + +# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. +-dontwarn org.codehaus.mojo.animal_sniffer.* + +# OkHttp platform used only on JVM and when Conscrypt dependency is available. +-dontwarn okhttp3.internal.platform.ConscryptPlatform +-dontwarn org.conscrypt.ConscryptHostnameVerifier +############################################ okhttp + +############################################ okio +# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. +-dontwarn org.codehaus.mojo.animal_sniffer.* +############################################ okio + + +##---------------Begin: proguard configuration for Gson ---------- +# Gson uses generic type information stored in a class file when working with fields. Proguard +# removes such information by default, so configure it to keep all of it. +-keepattributes Signature + +# For using GSON @Expose annotation +-keepattributes *Annotation* + +# Gson specific classes +-dontwarn sun.misc.** +#-keep class com.google.gson.stream.** { *; } + +# Application classes that will be serialized/deserialized over Gson +-keep class com.google.gson.examples.android.model.** { ; } + +# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory, +# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) +-keep class * extends com.google.gson.TypeAdapter +-keep class * implements com.google.gson.TypeAdapterFactory +-keep class * implements com.google.gson.JsonSerializer +-keep class * implements com.google.gson.JsonDeserializer + +# Prevent R8 from leaving Data object members always null +-keepclassmembers,allowobfuscation class * { + @com.google.gson.annotations.SerializedName ; +} +##---------------End: proguard configuration for Gson ---------- + + +##---------------Begin: proguard configuration for MMKV ---------- +# OSS_ANDROID_TEMPLATE_FILE_HEADER +# +# Proguard config for publish an private aar module +# NOTE: It's different from libraries' consumer proguard config +# +-renamesourcefileattribute SourceFile +-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,EnclosingMethod + +# Preserve all annotations. + +-keepattributes *Annotation* + +# Preserve all public classes, and their public and protected fields and +# methods. + +-keep public class * { + public protected *; +} + +# Preserve all .class method names. + +-keepclassmembernames class * { + java.lang.Class class$(java.lang.String); + java.lang.Class class$(java.lang.String, boolean); +} + +# Preserve all native method names and the names of their classes. + +-keepclasseswithmembernames class * { + native ; +} + +# Preserve the special static methods that are required in all enumeration +# classes. + +-keepclassmembers class * extends java.lang.Enum { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +# Explicitly preserve all serialization members. The Serializable interface +# is only a marker interface, so it wouldn't save them. +# You can comment this out if your library doesn't use serialization. +# If your code contains serializable classes that have to be backward +# compatible, please refer to the manual. + +-keepclassmembers class * implements java.io.Serializable { + static final long serialVersionUID; + static final java.io.ObjectStreamField[] serialPersistentFields; + private void writeObject(java.io.ObjectOutputStream); + private void readObject(java.io.ObjectInputStream); + java.lang.Object writeReplace(); + java.lang.Object readResolve(); +} +##---------------End: proguard configuration for MMKV ---------- + +##---------------Start: proguard configuration for Alipay ---------- +-keep class com.alipay.android.app.IAlixPay{*;} +-keep class com.alipay.android.app.IAlixPay$Stub{*;} +-keep class com.alipay.android.app.IRemoteServiceCallback{*;} +-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;} +-keep class com.alipay.sdk.app.PayTask{ public *;} +-keep class com.alipay.sdk.widget.**{*;} +-keep class com.alipay.sdk.app.AuthTask{ public *;} +-keep class com.alipay.sdk.app.H5PayCallback { + ; + ; +} +-keep class com.alipay.android.phone.mrpc.core.** { *; } +-keep class com.alipay.apmobilesecuritysdk.** { *; } +-keep class com.alipay.mobile.framework.service.annotation.** { *; } +-keep class com.alipay.mobilesecuritysdk.face.** { *; } +-keep class com.alipay.tscenter.biz.rpc.** { *; } +-keep class org.json.alipay.** { *; } +-keep class com.alipay.tscenter.** { *; } +-keep class com.ta.utdid2.** { *;} +-keep class com.ut.device.** { *;} +##---------------End: proguard configuration for Alipay ---------- + +##----测试一下,二维码生成和谷歌对话框的忽略(忽略该包下的所有类)---- +-keep class com.google.zxing.** { *; } +-keep class com.journeyapps.barcodescanner.** { *; } +-keep class com.afollestad.materialdialogs.** { *; }