From 6bd36a3afbd517f87e96ac8cf74b138f3e2d7120 Mon Sep 17 00:00:00 2001 From: Godfather <981964879@qq.com> Date: Mon, 25 Apr 2022 21:10:34 +0800 Subject: [PATCH] =?UTF-8?q?version:4.5=20fix:=20update:=E4=BC=98=E5=8C=96a?= =?UTF-8?q?ihua=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 59 +++++--- iconloaderlib/build.gradle | 11 +- src/com/aoleyun/os/Launcher.java | 44 +++--- src/com/aoleyun/os/icons/IconCache.java | 64 +++++---- src/com/aoleyun/os/uiuiutils/JGYUtils.java | 131 +++++++++++------- src/doc/xueshibaoos.jks | Bin 0 -> 2552 bytes .../os/shortcuts/DeepShortcutManager.java | 5 + 7 files changed, 196 insertions(+), 118 deletions(-) create mode 100644 src/doc/xueshibaoos.jks diff --git a/build.gradle b/build.gradle index 5a7c829..290f1ba 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { repositories { google() mavenCentral() - maven {url 'http://developer.huawei.com/repo/'} + maven { url 'http://developer.huawei.com/repo/' } maven { url "https://jitpack.io" } maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' } maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } @@ -43,7 +43,7 @@ android { gradle.projectsEvaluated { tasks.withType(JavaCompile) { Set fileSet = options.bootstrapClasspath.getFiles() - List newFileList = new ArrayList<>(); + List newFileList = new ArrayList<>(); //JAVA语法,可连续调用,输入参数建议为相对路径 newFileList.add(new File("libs/framework.jar")) //最后将原始参数添加 @@ -65,19 +65,17 @@ android { defaultConfig { minSdkVersion 26 targetSdkVersion 28 - versionCode 35 - versionName "4.4" + versionCode 36 + versionName "4.5" ndk { //选择要添加的对应 cpu 类型的 .so 库。 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' // 还可以添加 'x86', 'x86_64', 'mips', 'mips64' } + manifestPlaceholders = [ XG_ACCESS_ID : "1500026378", XG_ACCESS_KEY: "AH5QD9ZMBJ6R", -// JPUSH_PKGNAME: "com.aoleyun.os", -// JPUSH_APPKEY : "0c7ba5a1622dba78d5bd00cc", //JPush 上注册的包名对应的 Appkey. -// JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. ] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -86,16 +84,16 @@ android { //签名 signingConfigs { - alldocube { + zhanRui { storeFile file("src/doc/zhanxun.keystore") storePassword "123456" keyAlias "zhanxun" keyPassword "123456" v1SigningEnabled true - v2SigningEnabled false + v2SigningEnabled true } - alldocubeDebug { + zhanRuiUserdebug { storeFile file("src/doc/zhanxunUserdebug.keystore") storePassword "123456" keyAlias "zhanxunUserdebug" @@ -103,32 +101,55 @@ android { v1SigningEnabled true v2SigningEnabled false } + + mtk { + storeFile file("src/doc/xueshibaoos.jks") + storePassword "123456" + keyAlias "xueshibaoos" + keyPassword "123456" + v1SigningEnabled true + v2SigningEnabled true + } } buildTypes { - alldocubeDebug.initWith(debug) - alldocubeDebug { + zhanRuiDebug.initWith(debug) + zhanRuiDebug { + versionNameSuffix "-debug" buildConfigField "String", "platform", '"ZhanRui"' debuggable true + signingConfig signingConfigs.zhanRui + } + + zhanRuiRelease.initWith(release) + zhanRuiRelease { + buildConfigField "String", "platform", '"ZhanRui"' + signingConfig signingConfigs.zhanRui + } + + alldocubeDebug.initWith(debug) + alldocubeDebug { + buildConfigField "String", "platform", '"ZhanRuiCube"' + debuggable true versionNameSuffix "-debug" - signingConfig signingConfigs.alldocubeDebug + signingConfig signingConfigs.zhanRuiUserdebug } alldocubeDebugReleas.initWith(release) alldocubeDebugReleas { - buildConfigField "String", "platform", '"ZhanRui"' - signingConfig signingConfigs.alldocubeDebug + buildConfigField "String", "platform", '"ZhanRuiCube"' + signingConfig signingConfigs.zhanRuiUserdebug } debug { - buildConfigField "String", "platform", '"ZhanRui"' + buildConfigField "String", "platform", '"MTK"' debuggable true versionNameSuffix "-debug" minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //Zipalign优化 zipAlignEnabled true - signingConfig signingConfigs.alldocube + signingConfig signingConfigs.mtk applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile @@ -141,7 +162,7 @@ android { } release { - buildConfigField "String", "platform", '"ZhanRui"' + buildConfigField "String", "platform", '"MTK"' //混淆 minifyEnabled false //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 @@ -149,7 +170,7 @@ android { //Zipalign优化 zipAlignEnabled true //签名 - signingConfig signingConfigs.alldocube + signingConfig signingConfigs.mtk //将release版本的包名重命名,加上版本及日期 applicationVariants.all { variant -> variant.outputs.each { output -> diff --git a/iconloaderlib/build.gradle b/iconloaderlib/build.gradle index 38f48a7..f8a7c00 100644 --- a/iconloaderlib/build.gradle +++ b/iconloaderlib/build.gradle @@ -13,6 +13,14 @@ android { } buildTypes { + zhanRuiDebug { + minifyEnabled false + } + + zhanRuiRelease { + minifyEnabled false + } + alldocubeDebug { minifyEnabled false } @@ -20,11 +28,12 @@ android { alldocubeDebugReleas { minifyEnabled false } + debug { minifyEnabled false } - release { + release { minifyEnabled false } } diff --git a/src/com/aoleyun/os/Launcher.java b/src/com/aoleyun/os/Launcher.java index 1ba05c3..6db59d5 100644 --- a/src/com/aoleyun/os/Launcher.java +++ b/src/com/aoleyun/os/Launcher.java @@ -585,6 +585,9 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, // } public void setRoleHolderAsUser(Context context, String packageName) { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { + return; + } String roleName = "android.app.role.HOME"; boolean add = true; int flags = 0; @@ -593,21 +596,24 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, Log.i("settingssssssstemf", (add ? "Adding" : "Removing") + " package as role holder, role: " + roleName + ", package: " + packageName); - RoleManager roleManager = context.getSystemService(RoleManager.class); - Executor executor = context.getMainExecutor(); - Consumer callback = successful -> { - if (successful) { - Log.d("settingssssssstemf", "Package " + (add ? "added" : "removed") - + " as role holder, role: " + roleName + ", package: " + packageName); - } else { - Log.d("settingssssssstemf", "Failed to " + (add ? "add" : "remove") - + " package as role holder, role: " + roleName + ", package: " - + packageName); - } - }; + if (JGYUtils.getInstance().checkAppPlatform() != JGYUtils.MTKPlatform) { + RoleManager roleManager = context.getSystemService(RoleManager.class); + Executor executor = context.getMainExecutor(); + Consumer callback = successful -> { + if (successful) { + Log.d("settingssssssstemf", "Package " + (add ? "added" : "removed") + + " as role holder, role: " + roleName + ", package: " + packageName); + } else { + Log.d("settingssssssstemf", "Failed to " + (add ? "add" : "remove") + + " package as role holder, role: " + roleName + ", package: " + + packageName); + } + }; + + roleManager.addRoleHolderAsUser(roleName, packageName, flags, user, executor, callback); + Log.i("settingssssssstemf", "addRoleHolderAsUser done"); + } - roleManager.addRoleHolderAsUser(roleName, packageName, flags, user, executor, callback); - Log.i("settingssssssstemf", "addRoleHolderAsUser done"); } private TimeChangedReceiver mTimeChangedReceiver; @@ -1403,7 +1409,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, } private void checkAppUpdate(NewestAppUpdateResult result) { - int app_version_code = result.getVersion_code(); + int version_code = result.getVersion_code(); String app_package = result.getApp_package(); String url = result.getUrl(); PackageInfo info = null; @@ -1412,7 +1418,13 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } - if (info == null || info.versionCode < app_version_code || info.getLongVersionCode() < app_version_code) { + long appVersionCode; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + appVersionCode = info.getLongVersionCode(); + } else { + appVersionCode = info.versionCode; + } + if (info != null && appVersionCode < version_code) { Aria.download(this) .load(url) .setExtendField(result.toString()) diff --git a/src/com/aoleyun/os/icons/IconCache.java b/src/com/aoleyun/os/icons/IconCache.java index 3ce3d9c..ffc3a3a 100644 --- a/src/com/aoleyun/os/icons/IconCache.java +++ b/src/com/aoleyun/os/icons/IconCache.java @@ -231,36 +231,37 @@ public class IconCache extends BaseIconCache { info.applyFrom((entry.icon == null) ? getDefaultIcon(info.user) : entry); } - private List appClassNameList = new ArrayList() { - { - this.add("com.aoleyun.appstore.activity.SplashActivity");//应用市场 - this.add("com.aoleyun.browser.BrowserActivity");//浏览器 - this.add("com.aoleyun.sn.activity.SplashActivity");// - this.add("com.aoleyun.info.activity.main.MainActivity");// - this.add("com.android.calculator2.Calculator");//计算器 - this.add("com.android.calendar.AllInOneActivity");//日历 - this.add("com.android.camera.CameraLauncher");//相机 - this.add("com.mediatek.camera.CameraLauncher");//相机 - this.add("com.android.contacts.activities.PeopleActivity");//通讯录 - this.add("com.android.deskclock.DeskClock");//时钟 - this.add("com.android.dialer.DialtactsActivity");//电话 - this.add("com.android.dialer.main.impl.MainActivity");//电话 - this.add("com.android.gallery3d.v2.app.GalleryActivity2");//图库 - this.add("com.android.messaging.ui.conversationlist.ConversationListActivity");//信息 - this.add("com.android.music.MusicBrowserActivity");//音乐 - this.add("com.android.providers.downloads.ui.DownloadList");//下载 - this.add("com.android.quicksearchbox.SearchActivity");//搜索 - this.add("com.android.settings.Settings");//设置 - this.add("com.sprd.soundrecorder.RecorderActivity");//录音机 - this.add("com.android.stk.StkMain");//sim卡 - this.add("com.sprd.gallery3d.app.NewVideoActivity");//视频 - this.add("com.mediatek.filemanager.FileManagerOperationActivity");//文件管理 - this.add("com.android.documentsui.LauncherActivity");//下载 - this.add("com.mediatek.fmradio.FmRadioActivity");//收音机 - this.add("com.android.fmradio.FmMainActivity");//收音机 - this.add("com.android.email.activity.Welcome");//电子邮件 - } - }; + private List appClassNameList = new ArrayList() {{ + this.add("com.aoleyun.appstore.activity.SplashActivity");//应用市场 + this.add("com.aoleyun.browser.BrowserActivity");//浏览器 + this.add("com.aoleyun.sn.activity.SplashActivity");// + this.add("com.aoleyun.info.activity.main.MainActivity");// + this.add("com.android.calculator2.Calculator");//计算器 + this.add("com.android.calendar.AllInOneActivity");//日历 + this.add("com.android.camera.CameraLauncher");//相机 + this.add("com.mediatek.camera.CameraLauncher");//相机 + this.add("com.android.contacts.activities.PeopleActivity");//通讯录 + this.add("com.android.deskclock.DeskClock");//时钟 + this.add("com.android.dialer.DialtactsActivity");//电话 + this.add("com.android.dialer.app.DialtactsActivity");//电话 + this.add("com.android.dialer.main.impl.MainActivity");//电话 + this.add("com.android.gallery3d.v2.app.GalleryActivity2");//图库 + this.add("com.android.gallery3d.app.GalleryActivity");//图库 + this.add("com.android.messaging.ui.conversationlist.ConversationListActivity");//信息 + this.add("com.android.music.MusicBrowserActivity");//音乐 + this.add("com.android.providers.downloads.ui.DownloadList");//下载 + this.add("com.android.quicksearchbox.SearchActivity");//搜索 + this.add("com.android.settings.Settings");//设置 + this.add("com.sprd.soundrecorder.RecorderActivity");//录音机 + this.add("com.android.soundrecorder.SoundRecorder");//录音机 + this.add("com.android.stk.StkMain");//sim卡 + this.add("com.sprd.gallery3d.app.NewVideoActivity");//视频 + this.add("com.mediatek.filemanager.FileManagerOperationActivity");//文件管理 + this.add("com.android.documentsui.LauncherActivity");//下载 + this.add("com.mediatek.fmradio.FmRadioActivity");//收音机 + this.add("com.android.fmradio.FmMainActivity");//收音机 + this.add("com.android.email.activity.Welcome");//电子邮件 + }}; private List appIconList = new ArrayList() {{ this.add("com_android_appstore"); this.add("com_android_browser"); @@ -274,6 +275,8 @@ public class IconCache extends BaseIconCache { this.add("com_android_deskclock"); this.add("com_android_dialer"); this.add("com_android_dialer"); + this.add("com_android_dialer"); + this.add("com_android_gallery3d_app"); this.add("com_android_gallery3d_app"); this.add("com_android_mms_ui"); this.add("com_android_music"); @@ -281,6 +284,7 @@ public class IconCache extends BaseIconCache { this.add("com_android_quicksearchbox"); this.add("com_android_settings"); this.add("com_android_soundrecorder"); + this.add("com_android_soundrecorder"); this.add("com_android_stk_stkmain"); this.add("com_android_vdieo"); this.add("com_mediatek_filemanager"); diff --git a/src/com/aoleyun/os/uiuiutils/JGYUtils.java b/src/com/aoleyun/os/uiuiutils/JGYUtils.java index 250e1f2..18b3cc0 100644 --- a/src/com/aoleyun/os/uiuiutils/JGYUtils.java +++ b/src/com/aoleyun/os/uiuiutils/JGYUtils.java @@ -28,10 +28,19 @@ public class JGYUtils { private static JGYUtils sInstance; private Context mContext; private ContentResolver mResolver; - public static int MTKPlatform = 1; - public static int ZhanruiPlatform = 2; + + public static int UnknowPlatform = 0; + public static int MTKPlatform = 1; + // TODO: 2022/4/23 标签替换未完成 + public static int CubePlatform = 2; + public static int ZhanruiPlatform = 3; + + + public static String Other = "其他"; public static String MTKTag = "MTK"; + // TODO: 2022/4/23 标签替换未完成 + public static String CubeTag = "展锐cube"; public static String ZhanruiTag = "展锐"; @@ -56,6 +65,74 @@ public class JGYUtils { return sInstance; } + public int checkSNPlatform(String sn) { + String secondChars = sn.substring(1, 2); + if ("N".equalsIgnoreCase(secondChars)) {//MTK平台 + return MTKPlatform; + } else if ("R".equalsIgnoreCase(secondChars)) {//展锐平台 + return ZhanruiPlatform; + } else { + Log.e(TAG, "checkSNPlatform: " + "sn: " + sn + "没有对应平台"); + return UnknowPlatform; + } + } + + public int checkAppPlatform() { + String platform = BuildConfig.platform; + if ("MTK".equalsIgnoreCase(platform)) { + Log.i(TAG, "checkAppPlatform: " + "MTK平台"); + return MTKPlatform; + } else if ("ZhanRui".equalsIgnoreCase(platform)) { + Log.i(TAG, "checkAppPlatform: " + "展锐平台"); + return ZhanruiPlatform; + } else if ("ZhanRuiCube".equalsIgnoreCase(platform)) { + Log.i(TAG, "checkAppPlatform: " + "酷比平台"); + return CubePlatform; + } else { + Log.i(TAG, "checkAppPlatform: " + "没有数据"); + return UnknowPlatform; + } + } + + public boolean isSamePlatform(String platform) { + String AppPlatform = BuildConfig.platform; + if ("ZhanRui".equals(AppPlatform)) { + return ZhanruiTag.equals(platform); + } else { + return AppPlatform.equals(platform); + } + } + + public interface GetAppPlatformCallback { + void AppPlatform(int platform); + } + + public void getAppPlatform(GetAppPlatformCallback getAppPlatformCallback) { + String platform = BuildConfig.platform; + if ("MTK".equalsIgnoreCase(platform)) { + getAppPlatformCallback.AppPlatform(MTKPlatform); + } else if ("ZhanRui".equalsIgnoreCase(platform)) { + getAppPlatformCallback.AppPlatform(ZhanruiPlatform); + } else if ("ZhanRuiCube".equalsIgnoreCase(platform)) { + getAppPlatformCallback.AppPlatform(CubePlatform); + } else { + getAppPlatformCallback.AppPlatform(UnknowPlatform); + } + } + + public String getAppPlatform() { + String platform = BuildConfig.platform; + if ("MTK".equalsIgnoreCase(platform)) { + return MTKTag; + } else if ("ZhanRui".equalsIgnoreCase(platform)) { + return ZhanruiTag; + } else if ("ZhanRuiCube".equalsIgnoreCase(platform)) { + return CubeTag; + } else { + return Other; + } + } + public static boolean isOfficialVersion() { String channelValue = JGYUtils.getInstance().getStringMetaData(); return "official".equals(channelValue); @@ -88,56 +165,6 @@ public class JGYUtils { return value; } - public int checkSNPlatform(String sn) { - String secondChars = sn.substring(1, 2); - if ("N".equalsIgnoreCase(secondChars)) {//MTK平台 - return MTKPlatform; - } else if ("R".equalsIgnoreCase(secondChars)) {//展锐平台 - return ZhanruiPlatform; - } else { - Log.e(TAG, "checkSNPlatform: " + "sn: " + sn + "没有对应平台"); - return UnknowPlatform; - } - } - - public int checkAppPlatform() { - String platform = BuildConfig.platform; - if ("MTK".equalsIgnoreCase(platform)) { - Log.i(TAG, "checkAppPlatform: " + "MTK平台"); - return MTKPlatform; - } else if ("ZhanRui".equalsIgnoreCase(platform)) { - Log.i(TAG, "checkAppPlatform: " + "展锐平台"); - return ZhanruiPlatform; - } else { - Log.i(TAG, "checkAppPlatform: " + "没有数据"); - return UnknowPlatform; - } - } - - public boolean isSamePlatform(String platform) { - String AppPlatform = BuildConfig.platform; - if ("ZhanRui".equals(AppPlatform)) { - return ZhanruiTag.equals(platform); - } else { - return AppPlatform.equals(platform); - } - } - - public interface GetAppPlatformCallback { - void AppPlatform(int platform); - } - - public void getAppPlatform(GetAppPlatformCallback getAppPlatformCallback) { - String platform = BuildConfig.platform; - if ("MTK".equalsIgnoreCase(platform)) { - getAppPlatformCallback.AppPlatform(MTKPlatform); - } else if ("ZhanRui".equalsIgnoreCase(platform)) { - getAppPlatformCallback.AppPlatform(ZhanruiPlatform); - } else { - getAppPlatformCallback.AppPlatform(UnknowPlatform); - } - } - public static String getCustomVersion() { if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.ZhanruiPlatform) { return getProperty("ro.build.display.id", "获取失败"); diff --git a/src/doc/xueshibaoos.jks b/src/doc/xueshibaoos.jks new file mode 100644 index 0000000000000000000000000000000000000000..b94a626a1e59b41e0d2b0e1725c1d164b6a8f5ab GIT binary patch literal 2552 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 h=~IOHotm-=tG={6OY~?wV#1*=AWE shortcutInfos = null; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { + return Collections.EMPTY_LIST; + } try { shortcutInfos = mLauncherApps.getShortcuts(q, user); mWasLastCallSuccess = true;