From ef836554ad1b525b6fcbbb496ad6454c133b0e70 Mon Sep 17 00:00:00 2001 From: Fanhuitong <981964879@qq.com> Date: Thu, 11 Jul 2024 17:12:25 +0800 Subject: [PATCH] =?UTF-8?q?version:1.0.0=20update:=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B7=B7=E6=B7=86=EF=BC=8C=E4=BC=98=E5=8C=96=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E5=8C=85=E5=90=8D=20bugfixes:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + app/.gitignore | 1 + app/build.gradle | 20 +- app/proguard-rules.pro | 432 ++++++++++++++++++ .../activity/emergency/EmergencyActivity.java | 2 +- .../xxpatx/os/activity/main/MainActivity.java | 1 + .../os/activity/weather/WeatherActivity.java | 8 +- .../os/activity/weather/WeatherViewModel.java | 13 +- .../com/xxpatx/os/base/BaseApplication.java | 2 +- .../os/fragment/app/AppListFragment.java | 8 +- .../os/fragment/custom/CustomFragment.java | 2 +- .../xxpatx/os/fragment/home/HomeFragment.java | 2 +- .../fragment/settings/SettingsFragment.java | 2 +- .../com/xxpatx/os/manager/RemoteManager.java | 6 +- .../com/xxpatx/os/network/UrlAddress.java | 2 +- .../java/com/xxpatx/os/utils/ApkUtils.java | 22 +- .../java/com/xxpatx/os/utils/IconUtils.java | 4 +- 17 files changed, 488 insertions(+), 40 deletions(-) diff --git a/.gitignore b/.gitignore index 3aa2f13..6ed3b0e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ /app/src/androidTest/java/com/uiui/os/ /app/src/test/java/com/uiui/os/ /.idea/ +/app/proguardbuild/ diff --git a/app/.gitignore b/app/.gitignore index 796b96d..2e4443b 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,2 @@ /build +/proguardbuild/ diff --git a/app/build.gradle b/app/build.gradle index 33fd075..e04e0c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,8 +22,8 @@ android { ndk { //根据需要 自行选择添加的对应cpu类型的.so库。 - abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' - // 还可以添加 'x86', 'x86_64', 'mips', 'mips64' + abiFilters 'arm64-v8a' + // 还可以添加 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64' } manifestPlaceholders = [ @@ -62,11 +62,15 @@ android { buildTypes { debug { - // 显示Log versionNameSuffix "-debug" - minifyEnabled false //Zipalign优化 zipAlignEnabled true + shrinkResources true + //混淆 + minifyEnabled true + //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + //签名 signingConfig signingConfigs.tuixin applicationVariants.all { variant -> variant.outputs.each { output -> @@ -79,16 +83,16 @@ android { } release { - // 不显示Log - //混淆 - minifyEnabled false //Zipalign优化 zipAlignEnabled true + shrinkResources true + //混淆 + minifyEnabled true //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //签名 signingConfig signingConfigs.tuixin -// 将release版本的包名重命名,加上版本及日期 + //将release版本的包名重命名,加上版本及日期 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = "" diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index f1b4245..0d8a671 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -19,3 +19,435 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile + + +# ------------------------------基本指令区--------------------------------- +-optimizationpasses 5 #指定压缩级别 +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #混淆时采用的算法 +-verbose #打印混淆的详细信息 +-dontoptimize #关闭优化 +-keepattributes *Annotation* #保留注解中的参数 +-keepattributes *Annotation*,InnerClasses # 保持注解 +-keepattributes Signature # 避免混淆泛型, 这在JSON实体映射时非常重要 +-ignorewarnings # 屏蔽警告 +-keepattributes SourceFile,LineNumberTable # 抛出异常时保留代码行号 +#混淆时不使用大小写混合,混淆后的类名为小写(大小写混淆容易导致class文件相互覆盖) +-dontusemixedcaseclassnames + +#未混淆的类和成员 +-printseeds proguardbuild/print_seeds.txt +#列出从 apk 中删除的代码 +-printusage proguardbuild/print_unused.txt +#混淆前后的映射,生成映射文件 +-printmapping proguardbuild/print_mapping.txt + +# 指定一个文本文件,其中所有有效字词都用作混淆字段和方法名称。 +# 默认情况下,诸如“a”,“b”等短名称用作混淆名称。 +# 使用模糊字典,您可以指定保留关键字的列表,或具有外来字符的标识符, +# 例如: 忽略空格,标点符号,重复字和#符号后的注释。 +# 注意,模糊字典几乎不改善混淆。 有些编译器可以自动替换它们,并且通过使用更简单的名称再次混淆,可以很简单地撤消该效果。 +# 最有用的是指定类文件中通常已经存在的字符串(例如'Code'),从而减少类文件的大小。 仅适用于混淆处理。 +#-obfuscationdictionary proguardbuild/pro_package.txt + +# 指定一个文本文件,其中所有有效词都用作混淆类名。 与-obfuscationdictionary类似。 仅适用于混淆处理。 +#-classobfuscationdictionary proguardbuild/pro_class.txt + +# 指定一个文本文件,其中所有有效词都用作混淆包名称。与-obfuscationdictionary类似。 仅适用于混淆处理。 +#-packageobfuscationdictionary proguardbuild/pro_func.txt + +# -------------------------------基本指令区-------------------------------- + + +#---------------------------------默认保留区--------------------------------- +#继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆 +-keep public class * extends android.app.Activity +-keep public class * extends androidx.fragment.app.Fragment +-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 class android.support.** {*;} + +# androidx 混淆 +-keep class com.google.android.material.** {*;} +-keep class androidx.** {*;} +-keep public class * extends androidx.** +-keep interface androidx.** {*;} +-keep class * implements androidx.** {*;} +-dontwarn com.google.android.material.** +-dontnote com.google.android.material.** +-dontwarn androidx.** +-printconfiguration +-keep,allowobfuscation interface androidx.annotation.Keep +-keep @androidx.annotation.Keep class * +-keepclassmembers class * {@androidx.annotation.Keep *;} + +#不混淆View中的set***() 和 get***()方法 以保证属性动画正常工作 某个类中的某个方法不混淆 +#自定义View的set get方法 和 构造方法不混淆 +-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); +} +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); + public (android.content.Context, android.util.AttributeSet, int); +} +#这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆 +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +#保持 Serializable 不被混淆 +-keepnames class * implements java.io.Serializable +#实现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(); +} +# 保留R文件中所有静态字段,以保证正确找到每个资源的ID +-keepclassmembers class **.R$* { + public static ; +} + + +-keepclassmembers class * { + void *(*Event); +} + +#保留枚举类中的values和valueOf方法 +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} +#保留Parcelable实现类中的Creator字段,以保证Parcelable机制正常工作 +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} + +#保持 Parcelable 不被混淆 +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} + +#不混淆包含native方法的类的类名以及native方法名 +-keepclasseswithmembernames class * { + native; +} + +#避免log打印输出 +-assumenosideeffects class android.util.Log { + public static *** v(...); + public static *** d(...); + public static *** i(...); + public static *** w(...); +} +#对含有反射类的处理 +#--------------------------------默认保留区-------------------------------------------- + + + +#----------------------------- WebView(项目中没有可以忽略) ----------------------------- +#webView需要进行特殊处理 +# WebView +-dontwarn android.webkit.WebView +-dontwarn android.net.http.SslError +-dontwarn android.webkit.WebViewClient +-keep public class android.webkit.WebView +-keep public class android.net.http.SslError +-keep public class android.webkit.WebViewClient +#在app中与HTML5的JavaScript的交互进行特殊处理 +#我们需要确保这些js要调用的原生方法不能够被混淆,于是我们需要做如下处理: +-keepclassmembers class com.deepocean.tplh5.helper.JsInterfaceHelper { + ; +} +#----------------------------- WebView(项目中没有可以忽略) ----------------------------- + + +#----------------------------- 实体类不可混淆 ------------------------------------------ +#添加实体类混淆规则 +# Application classes that will be serialized/deserialized over Gson +-keep class **.entity.** { *; } +-keep class **.bean.** { *; } +#----------------------------- 实体类不可混淆 ------------------------------------------ + +-dontwarn com.xxpatx.os.bean.** +-keep class com.xxpatx.os.bean.**{*;} + +-keep class com.xxpatx.os.utils.AppUsedTimeUtils { *; } +-keep class com.xxpatx.os.utils.AppUsedTimeUtils$AppTimeinfo { *; } +-keepclassmembers class com.xxpatx.os.utils.AppUsedTimeUtils.AppTimeinfo { + ; + ; +} + +#----------------------------- 第三方类库 ------------------------------------------ +#添加第三方类库的混淆规则 +#Adjust sdk +-keep class com.adjust.sdk.**{ *; } +-keep class com.google.android.gms.common.ConnectionResult { + int SUCCESS; +} +-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient { + com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context); +} +-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info { + java.lang.String getId(); + boolean isLimitAdTrackingEnabled(); +} +-keep public class com.android.installreferrer.**{ *; } +# OkHttp3 去掉缺失类警告 +-dontwarn org.bouncycastle.** +-dontwarn org.conscrypt.** +-dontwarn org.openjsse.javax.net.ssl.** +-dontwarn org.openjsse.net.ssl.** +#----------------------------- 第三方类库 ------------------------------------------ + +#Aria +-dontwarn com.arialyy.aria.** +-keep class com.arialyy.aria.**{*;} + +#QWeather +-dontwarn com.qweather.sdk.** +-keep class com.qweather.sdk.**{*;} + +#NiceImageView +-dontwarn com.shehuan.niv.** +-keep class com.shehuan.niv.**{*;} + +#verification-view +-dontwarn com.tuo.customview.** +-keep class com.tuo.customview.**{*;} + +#disklrucache +-dontwarn com.jakewharton.disklrucache.** +-keep class com.jakewharton.disklrucache.**{*;} + +#glide +-keep public class * implements com.bumptech.glide.module.GlideModule +-keep public class * extends com.bumptech.glide.module.AppGlideModule +-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {**[] $VALUES; public *;} +#target<27 +-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder +# for DexGuard only +#-keepresourcexmlelements manifest/application/meta-data@value=GlideModule + +#-------------- okhttp3 start------------- +# OkHttp3 +# https://github.com/square/okhttp +# okhttp +-keepattributes Signature +-keepattributes *Annotation* +-keep class com.squareup.okhttp.* { *; } +-keep interface com.squareup.okhttp.** { *; } +-dontwarn com.squareup.okhttp.** + +# okhttp 3 +-keepattributes Signature +-keepattributes *Annotation* +-keep class okhttp3.** { *; } +-keep interface okhttp3.** { *; } +-dontwarn okhttp3.** + +# Okio +-dontwarn com.squareup.** +-dontwarn okio.** +-keep public class org.codehaus.* { *; } +-keep public class java.nio.* { *; } +#----------okhttp end-------------- + +## ---------Retrofit混淆方法--------------- +-dontwarn javax.annotation.** +-dontwarn javax.inject.** +# OkHttp3 +-dontwarn okhttp3.logging.** +-keep class okhttp3.internal.**{*;} +-dontwarn okio.** +# Retrofit +-dontwarn retrofit2.** +-keep class retrofit2.** { *; } +-keepattributes Signature +-keepattributes Exceptions +# RxJava RxAndroid +-dontwarn sun.misc.** +-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { + long producerIndex; + long consumerIndex; +} +-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { + rx.internal.util.atomic.LinkedQueueNode producerNode; +} +-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { + rx.internal.util.atomic.LinkedQueueNode consumerNode; +} + +# Gson +-keep class com.google.gson.stream.** { *; } +-keepattributes EnclosingMethod + +# Gson +-keep class com.demo.demo1.service.bean.**{*;} # 自定义数据模型的bean目录 + +# zxing +-dontwarn com.google.zxing.** +-keep class com.google.zxing.** { *; } + +# rxlifecycle +-dontwarn com.trello.rxlifecycle4.** +-keep class com.trello.rxlifecycle4.** { *; } +-dontwarn com.trello.lifecycle4.** +-keep class com.trello.lifecycle4.** { *; } + +# rxbinding4 +-dontwarn com.jakewharton.rxbinding4.** +-keep class com.jakewharton.rxbinding4.** { *; } + +# live-event-bus-x +-dontwarn com.jeremyliao.liveeventbus.** +-keep class com.jeremyliao.liveeventbus.** { *; } +-keep class android.arch.lifecycle.** { *; } +-keep class android.arch.core.** { *; } + +# facebook rebound +-dontwarn com.facebook.rebound.** +-keep class com.facebook.rebound.** { *; } + +#amap start +# 3D 地图 V5.0.0之前: +-keep class com.amap.api.maps.**{*;} +-keep class com.autonavi.amap.mapcore.*{*;} +-keep class com.amap.api.trace.**{*;} + +# 3D 地图 V5.0.0之后: +-keep class com.amap.api.maps.**{*;} +-keep class com.autonavi.**{*;} +-keep class com.amap.api.trace.**{*;} + +# 定位 +-keep class com.amap.api.location.**{*;} +-keep class com.amap.api.fence.**{*;} +-keep class com.loc.**{*;} +-keep class com.autonavi.aps.amapapi.model.**{*;} + +# 搜索 +-keep class com.amap.api.services.**{*;} + +# 2D地图 +-keep class com.amap.api.maps2d.**{*;} +-keep class com.amap.api.mapcore2d.**{*;} + +# 导航 +-keep class com.amap.api.navi.**{*;} +-keep class com.autonavi.**{*;} +#amap end + +# mmkv +# Keep all native methods, their classes and any classes in their descriptors +-keepclasseswithmembers,includedescriptorclasses class com.tencent.mmkv.** { + native ; + long nativeHandle; + private static *** onMMKVCRCCheckFail(***); + private static *** onMMKVFileLengthError(***); + private static *** mmkvLogImp(...); + private static *** onContentChangedByOuterProcess(***); +} + +# bugly +-dontwarn com.tencent.bugly.** +-keep class com.tencent.bugly.**{*;} + +# xcrash +-dontwarn xcrash.** +-keep class xcrash.**{*;} + +# aliyun push +-keepclasseswithmembernames class ** { + native ; +} +-keepattributes Signature +-keep class sun.misc.Unsafe { *; } +-keep class com.taobao.** {*;} +-keep class com.alibaba.** {*;} +-keep class com.alipay.** {*;} +-keep class com.ut.** {*;} +-keep class com.ta.** {*;} +-keep class anet.**{*;} +-keep class anetwork.**{*;} +-keep class org.android.spdy.**{*;} +-keep class org.android.agoo.**{*;} +-keep class android.os.**{*;} +-keep class org.json.**{*;} +-dontwarn com.taobao.** +-dontwarn com.alibaba.** +-dontwarn com.alipay.** +-dontwarn anet.** +-dontwarn org.android.spdy.** +-dontwarn org.android.agoo.** +-dontwarn anetwork.** +-dontwarn com.ut.** +-dontwarn com.ta.** + +# UltimateBarX +-keep class com.zackratos.ultimatebarx.ultimatebarx.** { *; } +-keep class * extends androidx.fragment.app.Fragment { *; } + +# MagicIndicator +-dontwarn net.lucode.hackware.** +-keep class net.lucode.hackware.**{*;} + +# circleprogressview +-dontwarn com.king.view.circleprogressview.** +-keep class com.king.view.circleprogressview.**{*;} + +# jiaozivideoplayer +-keep public class cn.jzvd.JZMediaSystem {*; } +-keep public class cn.jzvd.demo.CustomMedia.CustomMedia {*; } +-keep public class cn.jzvd.demo.CustomMedia.JZMediaIjk {*; } +-keep public class cn.jzvd.demo.CustomMedia.JZMediaSystemAssertFolder {*; } + +-keep class tv.danmaku.ijk.media.player.** {*; } +-dontwarn tv.danmaku.ijk.media.player.* +-keep interface tv.danmaku.ijk.media.player.** { *; } + +# FFmpegMediaMetadataRetriever +-dontwarn wseemann.media.** +-keep class wseemann.media.**{*;} + +# pictureselector start +-keep class com.luck.picture.lib.** { *; } +#// use Camerax +-keep class com.luck.lib.camerax.** { *; } +#// use uCrop +-dontwarn com.yalantis.ucrop** +-keep class com.yalantis.ucrop** { *; } +-keep interface com.yalantis.ucrop** { *; } +# pictureselector end + +# FlycoTabLayout +-dontwarn com.flyco.tablayout.** +-keep class com.flyco.tablayout.**{ *; } + +# Android-PickerView +-dontwarn com.bigkoo.pickerview.** +-keep class com.bigkoo.pickerview.**{ *; } + +# LoadingDialog +-dontwarn com.xiasuhuei321.loadingdialog.** +-keep class com.xiasuhuei321.loadingdialog.**{ *; } + +# XXPermissions +-keep class com.hjq.permissions.** {*;} + +# Toaster +-keep class com.hjq.toast.** {*;} + + diff --git a/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyActivity.java b/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyActivity.java index cda4e50..73be5db 100644 --- a/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyActivity.java +++ b/app/src/main/java/com/xxpatx/os/activity/emergency/EmergencyActivity.java @@ -58,7 +58,7 @@ public class EmergencyActivity extends BaseMvvmActivity showPackageName = new HashSet() {{ - this.add("com.uiuios.sn"); + this.add("com.xxpatx.sn"); this.add("com.uiuios.browser"); -// this.add("com.uiuios.appstore"); +// this.add("com.xxpatx.store"); this.add("com.android.dialer"); this.add("com.android.gallery3d"); this.add("com.android.settings"); @@ -158,14 +158,14 @@ public class ApkUtils { this.add("com.android.gallery3d"); this.add("com.android.camera2"); this.add("com.android.settings"); - this.add("com.uiuios.sn"); - this.add("com.uiuios.appstore"); + this.add("com.xxpatx.sn"); + this.add("com.xxpatx.store"); }}; private static List hideApp = new ArrayList() {{ - this.add("com.uiuios.sn"); + this.add("com.xxpatx.sn"); this.add("com.xxpatx.os"); - this.add("com.uiuios.appstore"); + this.add("com.xxpatx.store"); this.add("com.android.quicksearchbox"); this.add("com.android.stk"); this.add("com.debug.loggerui"); @@ -249,7 +249,7 @@ public class ApkUtils { resolveInfos.add(resolveInfo); } } else { - if ("com.uiuios.sn".equals(pkg)) { + if ("com.xxpatx.sn".equals(pkg)) { resolveInfos.add(resolveInfo); } else { Log.e(TAG, "queryFilterAppInfo: pkgSet ! contains " + pkg); @@ -322,7 +322,7 @@ public class ApkUtils { } public static final HashSet phoneShowPackageName = new HashSet() {{ - this.add("com.uiuios.sn"); + this.add("com.xxpatx.sn"); // this.add("com.uiuios.browser"); // this.add("com.android.dialer"); // this.add("com.android.gallery3d"); @@ -377,7 +377,7 @@ public class ApkUtils { resolveInfos.add(resolveInfo); } } else { -// if ("com.uiuios.sn".equals(pkg)) { +// if ("com.xxpatx.sn".equals(pkg)) { // resolveInfos.add(resolveInfo); // } else { Log.e(TAG, "getAppstoreAppInfo: pkgSet ! contains " + pkg); diff --git a/app/src/main/java/com/xxpatx/os/utils/IconUtils.java b/app/src/main/java/com/xxpatx/os/utils/IconUtils.java index 23b5a54..9c51619 100644 --- a/app/src/main/java/com/xxpatx/os/utils/IconUtils.java +++ b/app/src/main/java/com/xxpatx/os/utils/IconUtils.java @@ -7,8 +7,8 @@ import java.util.List; public class IconUtils { public static List appClassNameList = new ArrayList() {{ - this.add("com.uiuios.sn");//设别信息 - this.add("com.uiuios.appstore");//应用市场 + this.add("com.xxpatx.sn");//设备信息 + this.add("com.xxpatx.store");//应用市场 this.add("aios.appstore");//应用市场 this.add("com.uiui.weather");//天气 this.add("com.android.browser");//浏览器