当前位置: 首页 > news >正文

android 混淆

前沿

很久没用过混淆功能了,因为之前的包都使用第三方加固了,而且项目开发好几年了,突然要混淆也很麻烦。换了家公司后,感觉还是得混淆代码才行,不然直接暴露源码也太不行了。

启动混淆功能

isMinifyEnabled = true
#添加
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
)

getDefaultProguardFile(“proguard-android-optimize.txt”) 是系统默认的配置,而 proguard-rules.pro 才是我们自身的混淆配置

混淆

第三方库混淆

第三方一般都会自带混淆文件,或者是会提供混淆内容,如:

-keep class com.iflytek.**{*;}
-keepattributes Signature-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**-keep class com.tencent.smtt.** {*;
}-keep class com.tencent.tbs.** {*;
}

App 自身混淆

最需要注意的是我们的数据模型的混淆。
本来以为直接 -keep class com.xx.xx.model.** { *; } 就万事大吉了,结果发现还是不行。

-keep @kotlinx.serialization.Serializable class com.xx.android.netlib.model.** { *; }

各种 gson ,泛型类,枚举类,Parcelable ,Serializable ,serialization等相关的都需要 keep住。
特别是如果遇到了需要通过 Gson.toJson POST 数据到服务器的,注意字段名别被混淆了,需要一个个字段注解上:

@SerializedName("id")
val id: Int? = null

不然上传的就是 a: 23 / b: 32 这样的了。

最后,发现还是死活不行。最后看到有人说要禁止全混淆模式,
在 gradle.properties 中:

android.enableR8.fullMode=false

此时,一万匹草尼玛奔腾而过。

android.enableR8.fullMode=false 是 Android Gradle 插件中的一个配置项,作用是 关闭 R8 的完整模式。完整模式会严格应用代码优化规则和检查,关闭它可以在某些情况下避免兼容性或构建问题。

具体作用
当设置为 false 时:

禁用 R8 的一些激进优化:

关闭某些潜在可能影响运行时行为的优化。
比如,不会删除那些可能看似未使用但实际被反射调用的代码。
保留更宽松的代码压缩策略:

避免因为未正确配置 ProGuard/R8 规则而导致代码、类、或资源被误删除。
对兼容性更友好,尤其是对于依赖于动态加载(如反射或动态代理)的代码。
减少一些潜在的构建时间开销:

构建过程更快,特别是在调试模式下。
更安全的过渡到 R8:

如果项目从 ProGuard 迁移到 R8,设置 android.enableR8.fullMode=false 可以让开发者逐步调整 R8 配置文件。

注意事项
此配置在 Android Gradle Plugin 4.0 之后已经被废弃: 如果你使用的 Android Gradle Plugin 版本是 4.0 及以上,android.enableR8.fullMode 的设置将被忽略,R8 会默认启用完整模式。

完整混淆配置

网络库:

-dontoptimize-keepattributes Signature-printmapping mapping.txt-verbose# Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items).-keep,allowobfuscation,allowshrinking interface retrofit2.Call-keep,allowobfuscation,allowshrinking class retrofit2.Response# With R8 full mode generic signatures are stripped for classes that are not# kept. Suspend functions are wrapped in continuations where the type argument# is used.-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation# App 的 model
-keepattributes Signature
# 保留带有 @Serializable 注解的类
-keep @kotlinx.serialization.Serializable class com.xx.android.netlib.model.** { *; }# 保留带有 @Parcelize 注解的类
-keep @kotlinx.parcelize.Parcelize class com.xx.android.netlib.model.** { *; }# 防止字段名被混淆
-keepclassmembers class com.xx.android.netlib.model.** {<fields>;
}-keepclassmembers class com.xx.android.netlib.model.InputAnswerModel {java.lang.String text;java.lang.String url;java.lang.String uuid;java.lang.String audio_text;
}-keepclassmembers class com.xx.android.netlib.model.EvaluationAnswerModel {int id;java.lang.String single;java.util.List<com.xx.android.netlib.model.InputAnswerModel> input;
}# 保留 Kotlin 元数据(支持反射和序列化)
-keep class kotlin.Metadata { *; }# 不混淆 Kotlin 内部的序列化类
-keepnames class kotlinx.** { *; }
-dontwarn kotlinx.**-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
-keep class com.xx.android.netlib.model.** { <fields>; }-keepattributes Annotation-keep class * extends java.lang.Enum { *; }#
-keep class com.xx.android.netlib.core.RetrofitClient { *; }# Retrofit
-dontwarn retrofit2.**
-dontwarn org.codehaus.mojo.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepattributes *Annotation*
-keepattributes RuntimeInvisibleAnnotations
-keepattributes RuntimeVisibleParameterAnnotations
-keepattributes RuntimeInvisibleParameterAnnotations
-keepattributes EnclosingMethod
-keepclasseswithmembers class * {
@retrofit2.* <methods>;
}
-keepclasseswithmembers interface * {
@retrofit2.* <methods>;
}# 保护特定生成类(R8 或 Kotlin 编译器)
-keep class com.xx.android.netlib.interceptor.InterceptorUtil$$ExternalSyntheticLambda* { *; }
-keep class com.xx.android.netlib.model.*$$serializer { *; }# 保留需要序列化/反射使用的字段
-keep class * {<fields>;
}# 保留 Gson 中使用的泛型类
-keepclassmembers class * {@com.google.gson.annotations.SerializedName <fields>;public static final ** CREATOR;
}# Gson 混淆规则
-keep class com.google.gson.** { *; }# OkHttp
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-keep class javax.net.ssl.** { *; }# 保留 TypeToken 信息
-keep class com.google.gson.reflect.TypeToken { *; }
-keepclassmembers class com.google.gson.reflect.TypeToken {<fields>;
}# 保护所有可能被反射调用的类
-keepclassmembers class * {void *(...);
}
# 保留所有使用泛型的方法(安全配置)
-keepclassmembers class * {public *;
}# 保留 Parcelable 的实现类
-keep class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator *;
}# 保留 kotlinx.parcelize 注解
-keep @kotlinx.parcelize.* class *
-keepclassmembers class * {@kotlinx.parcelize.* <fields>;
}# 保留反射所需的类信息
-keep class * implements java.io.Serializable { *; }-dontwarn com.franmontiel.persistentcookiejar.**
-keep class com.franmontiel.persistentcookiejar.**-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();
}# 保留所有需要通过反射访问的泛型参数
-keepclassmembers class * {java.lang.reflect.Type *;java.lang.reflect.ParameterizedType *;
}# 保留 kotlinx.serialization 注解
-keep @kotlinx.serialization.* class *
-keepclassmembers class * {@kotlinx.serialization.* <fields>;
}# 保留需要序列化的类
-keep class kotlinx.serialization.** { *; }
-keepnames class kotlinx.serialization.** { *; }
# 避免警告
-dontwarn kotlinx.serialization.**-keepclassmembers class kotlinx.serialization.** { *; }# 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# With R8 full mode generic signatures are stripped for classes that are not
# kept. Suspend functions are wrapped in continuations where the type argument
# is used.
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation-keep,allowoptimization,allowshrinking,allowobfuscation class <3>-keepclassmembers class * {java.lang.reflect.Type *;java.lang.reflect.ParameterizedType *;
}-keep @kotlinx.serialization.Serializable class * { *; }
-keepclassmembers class * {@kotlinx.serialization.Serializable <fields>;
}
-keep class kotlinx.serialization.** { *; }
-dontwarn kotlinx.serialization.**-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);
}-keep class kotlin.jvm.internal.* { *; }# 保留所有带有泛型的类的类型信息(更通用的规则)
-keepclassmembers class * {java.lang.reflect.Type getGenericSuperclass();java.lang.reflect.Type[] getGenericInterfaces();
}-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation-dontwarn java.lang.invoke.StringConcatFactory

app module :

# 保留泛型信息,避免运行时类型擦除导致异常
-keepattributes Signature
-keepattributes Exceptions-printmapping mapping.txt# app 包下的model需要keep 
-keep class com.xx.xx.model.** { *; }-dontwarn com.umeng.**
-dontwarn com.mobile.auth.**
-dontwarn com.cmic.sso.sdk.**
-dontwarn com.unicom.online.account.**
-dontwarn com.nirvana.**
-dontwarn com.ali.security.**-keep class com.umeng.** {*;}
-keep class com.mobile.auth.** {*;}
-keep class com.cmic.sso.sdk.** {*;}
-keep class com.unicom.online.account.** {*;}
-keep class com.nirvana.** {*;}
-keep class com.ali.security.** {*;}-keep class com.iflytek.**{*;}-keepclassmembers enum * {                                                      # 保持枚举 enum 类不被混淆public static **[] values();public static ** valueOf(java.lang.String);
}-dontwarn com.tencent.bugly.**-keep class com.tencent.bugly.** {*;}-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.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.view.View-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);
}

相关文章:

android 混淆

前沿 很久没用过混淆功能了&#xff0c;因为之前的包都使用第三方加固了&#xff0c;而且项目开发好几年了&#xff0c;突然要混淆也很麻烦。换了家公司后&#xff0c;感觉还是得混淆代码才行&#xff0c;不然直接暴露源码也太不行了。 启动混淆功能 isMinifyEnabled true …...

6、AI测试辅助-测试报告编写(生成Bug分析柱状图)

AI测试辅助-测试报告编写&#xff08;生成Bug分析柱状图&#xff09; 一、测试报告1. 创建测试报告2. 报告补充优化2.1 Bug图表分析 3. 风险评估 总结 一、测试报告 测试报告内容应该包含&#xff1a; 1、测试结论 2、测试执行情况 3、测试bug结果分析 4、风险评估 5、改进措施…...

让人工智能帮我写一个矩阵按键扫描程序

1.前言 嘉立创做了一块编程小车的蓝牙按键遥控器&#xff0c;按键是4*4矩阵的&#xff0c;通过蓝牙发送按键编码值给蓝牙小车&#xff08;外围设备&#xff09;。 原理图如下&#xff1a; 板子回来后&#xff0c;因为懒得写按键矩阵扫描程序&#xff0c;想想还是交给人工智能…...

基于MindSpore NLP的PEFT微调

创建notebook 登录控制台 创建notebook 如果出现提示按如下操作 回到列表页面创建notebook参数如下&#xff1a; 配置mindnlp环境 打开GitHub - mindspore-lab/mindnlp: Easy-to-use and high-performance NLP and LLM framework based on MindSpore, compatible with model…...

2024年12月CCF-GESP编程能力等级认证C++编程八级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 小杨家响应国家“以旧换新”政策,将自家的汽油车置换为新能源汽车,正在准备自编车牌。自编车牌包括5位数字或英文字母,要求…...

基于微信小程序的小区疫情防控ssm+论文源码调试讲解

第2章 程序开发技术 2.1 Mysql数据库 为了更容易理解Mysql数据库&#xff0c;接下来就对其具备的主要特征进行描述。 &#xff08;1&#xff09;首选Mysql数据库也是为了节省开发资金&#xff0c;因为网络上对Mysql的源码都已进行了公开展示&#xff0c;开发者根据程序开发需…...

moment()获取时间

moment 是一个 JavaScript 日期处理类库。 使用&#xff1a; //安装 moment npm install moment -- save引用 //在main.js中全局引入 import moment from "moment"设定moment区域为中国 //import 方式 import moment/locale/zh-cn moment.locale(zh-cn); 挂载全…...

CAD学习 day3

细节问题 快捷键X 分解单独进行操作如果需要制定字体样式选择 gdcbig.shx快捷键AA 算面积 平面布置图 客户沟通 - 会面笔记 - 客户需求(几个人居住、生活方式、功能需求(电竞房、家政柜)、书房、佛龛、儿童房、风格方向)根据客户需求 - 平面方案布置 (建议做三个以上方案) -…...

windows免登录linux

windows 生成秘钥文件 ssh-keygen -t rsa 将公钥传送到服务器 scp C:\Users\xx/.ssh/id_rsa.pub xxxx:/home/ruoyi/id_rsa.pub linux 使用ssh-copy-id -i ~/.ssh/id_rsa.pub userhost 如果禁用root登录&#xff0c;先开启 vim /etc/ssh/sshd_config PermitRootLogin yes …...

边缘计算的方式

做边缘计算这个行业要想赚得到收益&#xff0c;那一定要找到适合自己参与的一种方式。目前参与边缘计算的话&#xff0c;它主要有两个渠道。 第一个就是用盒子来跑&#xff0c;这个盒子的话包括光猫、路由器、摄像头等等&#xff0c;盒子是一条网线带动一个盒子&#xff0c;它…...

Android GO 版本锁屏声音无效问题

问题描述 Android go版本 在设置中打开锁屏音开关&#xff0c;息屏灭屏还是无声音 排查 vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\keyguard\KeyguardViewMediator.java private void setupLocked() {...String soundPath Settings.G…...

Android之RecyclerView显示数据列表和网格

一、RecyclerView的优势 RecyclerView 的最大优势在于&#xff0c;它对大型列表来说非常高效&#xff1a; 默认情况下&#xff0c;RecyclerView 仅会处理或绘制当前显示在屏幕上的项。例如&#xff0c;如果您的列表包含一千个元素&#xff0c;但只有 10 个元素可见&#xff0…...

汽车发动机电控系统-【传感器】篇

燃油&#xff1a;喷油控制&#xff08;不多不少&#xff09; 进气 主传感器MAP&#xff1a;进气压力传感器&#xff08;微型车&#xff09;、空气流量传感器MAF 辅助传感器&#xff1a;节气门传感器、水温传感器&#xff08;提供暖机工况&#xff09;、进气温度传感器 反馈…...

牛客周赛 Round 72 题解

本次牛客最后一个线段树之前我也没碰到过&#xff0c;等后续复习到线段树再把那个题当例题发出来 小红的01串&#xff08;一&#xff09; 思路&#xff1a;正常模拟&#xff0c;从前往后遍历一遍去统计即可 #include<bits/stdc.h> using namespace std; #define int lo…...

Python AI后台服务器

把数据训练放在后台&#xff0c;首先碰到的一个问题是如何高效地从数据库把数据请求下来。 分别试了几个库 modin 号称和pandas能够无缝衔接&#xff0c;试了下&#xff0c;确实pd.read_sql蛮快的&#xff0c;但是下来后数据格式就变了&#xff0c;不太好进行后续处理了conne…...

音视频入门基础:MPEG2-TS专题(19)——FFmpeg源码中,解析TS流中的PES流的实现

一、引言 FFmpeg源码在解析完PMT表后&#xff0c;会得到该节目包含的视频和音频信息&#xff0c;从而找到音视频流。TS流的音视频流包含在PES流中。FFmpeg源码通过调用函数指针tss->u.pes_filter.pes_cb指向的回调函数解析PES流的PES packet&#xff1a; /* handle one TS…...

Qt Q_ENUM enum 转 QString 枚举字符串互转; C++模板应用

Part1: Summary 项目中我们常用到命名&#xff0c;使用 enum 转成 string &#xff0c;方便简洁&#xff1b;Qt给我们提供了一个很方便的功能 Q_ENUM&#xff0c;可以实现枚举字符串互转&#xff1b; Q_ENUM宏将枚举注册到元对象系统中&#xff1b; QMetaEnum::fromType获取枚…...

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…...

windows C#-为枚举创建新方法

可使用扩展方法添加特定于某个特定枚举类型的功能。 示例 在下面的示例中&#xff0c;Grades 枚举表示学生可能在班里收到的字母等级分。 该示例将一个名为 Passing 的扩展方法添加到 Grades 类型中&#xff0c;以便该类型的每个实例现在都“知道”它是否表示合格的等级分。 …...

ISCTF复现-misc

File_Format 下载附件后用010打开查看文件头会发现是个exe文件 格式&#xff1a;文件描述&#xff08;后缀名&#xff09;&#xff0c;文件头(hex)&#xff1a;文件头标识&#xff08;十六进制&#xff09;PNG (png)&#xff0c;文件头(hex)&#xff1a;89504E47 PNGImageFile…...

知道一个服务器IP地址如果attack服务器地址

CSDN提醒&#xff1a;亲爱的用户&#xff1a;你好&#xff01; 你的账号于2024-12-17 19:04:04在美国美国登录&#xff0c;登录IP为&#xff1a;47.238.159.124。若非本人登录&#xff0c;请及时修改密码。 莫名其妙显示美国登录了我的CSDN博客 卧槽 服务器的IP地址是一个用于…...

【泛微系统】查询角色所在流程操作组

查询角色所在流程操作组 -----sqlserver-------SELECT CASE WHEN a.workflowname LIKE ~`~`% THEN SUBSTRING(a.workflowname, CHARINDEX(`~`7, a.workflowname...

ceph的RGW对象存储网关部署和使用

RGW对象存储网关部署和使用 Rados GateWay简称rgw&#xff0c;底层采用亚马逊的S3作为对象存储实现。 参考链接&#xff1a; https://docs.ceph.com/en/reef/radosgw/ https://docs.ceph.com/en/reef/radosgw/bucketpolicy/ https://docs.aws.amazon.com/zh_cn/AmazonS3/lat…...

智慧公交指挥中枢,数据可视化 BI 驾驶舱

随着智慧城市的蓬勃发展&#xff0c;公共交通作为城市运营的核心枢纽&#xff0c;正朝着智能化和数据驱动的方向演进。通过整合 CAN 总线技术(Controller Area Network&#xff0c;控制器局域网总线)、车载智能终端、大数据分析及处理等尖端技术&#xff0c;构建的公交“大脑”…...

fastjson 字符串转对象 boolean类型字段转换失败

fastjson 字符串转对象 boolean类型字段转换失败 问题出现场景问题出现的原因问题解决方式1方式2 问题出现场景 有一个json字符串&#xff0c;需要将这个字符串转换为对象&#xff0c;字符串中有个字段是布尔类型&#xff0c;对应的value是true&#xff0c;使用阿里的fastjson…...

浏览器事件循环机制

JavaScript 是单线程运行的语言&#xff0c;同一时间只能执行一个任务。单线程意味着&#xff1a; 如果某个任务执行时间过长&#xff0c;后续任务会被阻塞。 同步任务和异步任务的调度需要一种机制来管理。 为了解决这个问题&#xff0c;事件循环应运而生&#xff0c;它可以…...

Redis缓存穿透与缓存击穿

Redis缓存穿透与缓存击穿 缓存穿透 在默认情况下&#xff0c;用户请求数据时&#xff0c;会先在缓存(Redis)中查找&#xff0c;若没找到即缓存未命中&#xff0c;再在数据库中进行查找&#xff0c;数量少可能问题不大&#xff0c;可是一旦大量的请求数据&#xff08;例如秒杀…...

WEB自动化测试(selenium工具)框架、面试题

一、什么是web自动化测试 让程序员代替人为去验证web项目功能的过程 二、什么web项目适合自动化测试 1)需求变动不频繁 测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁&#xff0c;测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本&…...

Spring Boot 3.X:Unable to connect to Redis错误记录

一.背景 最近在搭建一个新项目&#xff0c;本着有新用新的原则&#xff0c;项目选择到了jdk17SpringBoot3.4。但是在测试Redis连接的时候却遇到了以下问题&#xff1a; redis连不上了。于是我先去检查了配置文件的连接信息&#xff0c;发现没问题&#xff1b;再去检查配置类&am…...

ISP算法之黑电平BLC校正

黑电平形成原因 Sensor本身问题 CMOS Sensor本身的电路会存在暗电流(dark current)&#xff0c;在没有光照条件下&#xff0c;感光器件等也会存在流动的电流&#xff0c;在光敏二极管器的伏安特性曲线中反向截止区电流并不为零&#xff08;如下图&#xff09;。导致在Sensor遮…...

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…...

【Python】利用函数模拟创建【栈】的数据结构操作

知识解读&#xff1a;来自&#xff1a;https://fishc.com.cn[#FwSB,M 9xKOA!^6fP)_EC(nsd什么是栈呢&#xff1f;Powered by https://fishc.com.cn3>A?5JXL#_}YBGD"FWdubKeyhQP栈是一种具有 FILO 特性的数据结构&#xff0c;即先放入的数据反而后取出。e&"%b…...

10 JVM内置锁

我们先想明白一个问题&#xff0c;什么是锁&#xff1f; 我们去给自己家锁门的时候&#xff0c;只有对应的一把钥匙能开锁。当用钥匙去开锁的时候&#xff0c;锁孔的内置型号会验证钥匙能不能对的上。能对上就能把锁打开&#xff0c;然后进到家里使用家里的资源。否则就在外面等…...

前端项目部署方法

ngnix服务器部署 下载nignx&#xff0c;我下的是windows版本的 下载链接&#xff1a;[https://nginx.org/en/download.html](https://nginx.org/en/download.html) 解压文件 如果原本的80端口号被占用了&#xff0c;可以改为其他的端口号 可以点击nginx.exe文件启动nginx,它可能…...

【1.排序】

排序 笔记记录 1.排序的基本概念1.1 排序的定义 2. 插入排序2.1 直接插入排序2.2 折半插入排序2.3 希尔排序 3. 交换排序3.1 冒泡排序3.2 快速排序 4. 选择排序4.1 简单选择排序4.2 堆排序 5. 归并排序、基数排序和计数排序5.1 归并排序4.2 基数排序4.3 计数排序 6. 各种内部排…...

visual studio添加滚动条预览

如何在vs中添加如图的滚动条呢&#xff1f; 打开VS 工具栏 选项 - 文本编辑器 - C/C - 滚动条 行为-使用缩略图 -- 确定...

[SAP ABAP] ALV状态栏GUI STATUS的快速创建

使用事务码SE38进入到指定程序&#xff0c;点击"显示对象列表"按钮 鼠标右键&#xff0c;选择"GUI状态" 弹出【创建状态】窗口&#xff0c;填写状态以及短文本描述以后&#xff0c;点击按钮 点击"调整模板"&#xff0c;复制已有程序的状态栏 填…...

鸿蒙元服务项目实战:备忘录UI页面开发

前言 之前写过一篇关于元服务项目的上架流程&#xff0c;为了更好的了解及开发元服务&#xff0c;准备从0到1简单开发一个小项目&#xff0c;也希望能够帮助到刚刚介入到鸿蒙开发的同学&#xff0c;具体项目呢&#xff0c;也是十分的简单&#xff0c;就是一个小巧的备忘录项目&…...

【Java基础面试题022】什么是Java内部类?有什么作用?

回答重点 Java内部类是指&#xff1a;在一个类的内部定义的类&#xff0c;Java支持多种类型的内部类&#xff0c;包括成员内部类、局部内部类、匿名内部类和静态内部类。实际上内部类是一个编译层面的概念&#xff0c;像一个语法糖一样&#xff0c;经过编译器之后其实内部类会…...

量子芯片在新医疗领域的应用研究展望

一、引言 &#xff08;一&#xff09;研究背景 随着科技的不断发展&#xff0c;量子芯片在新医疗领域有望在多个技术方面实现创新突破&#xff0c;进而持续拓展其应用范围与深度。 在提高纠错能力方面&#xff0c;当前量子比特的易错性是制约量子芯片广泛应用的关键因素之一…...

不可重入锁与死锁

不可重入锁确实可能导致死锁&#xff0c;特别是在同一线程尝试多次获取同一把锁时。如果锁是不可重入的&#xff0c;那么线程在第二次尝试获取锁时会永远阻塞&#xff0c;从而导致死锁。 不可重入锁与死锁的关系 不可重入锁不允许同一个线程多次获取同一把锁。在以下情况下&am…...

Linux(Ubuntu)命令大全——已分类整理,学习、查看更加方便直观!(2024年最新编制)

Hello! 认真好学的小伙伴们&#xff0c;大家好呀&#xff08;Respect~&#xff09;&#xff01;我是 H u a z z i Huazzi Huazzi&#xff0c;欢迎观看本篇博客&#xff0c;接下来让我们一起来学习 Ubuntu命令大全 吧&#xff01;祝你有所收获&#xff01; 文章目录 前言&#x…...

画一颗随机数

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>codePen - Random Tree</title> </head> <body><canvas></canvas><script>const canvas doc…...

机器人变换关系

rigid 刚性变换&#xff08;平移、旋转&#xff09;&#xff1a; 只改变位置和方向&#xff0c;拥有6个自由度&#xff0c;保持变换物体的形状。 affine 仿射变换&#xff08;平移、旋转、缩放、倾斜等&#xff09;&#xff1a; 改变物体形状、位置、方向&#xff0c;拥有12…...

2024年企业中生成式 AI 的现状报告

从试点到生产&#xff0c;企业 AI 格局正在被实时改写。我们对 600 名美国企业 IT 决策者进行了调查&#xff0c;以揭示新兴的赢家和输家。 从试点到生产 2024 年标志着生成性人工智能成为企业关键任务的一年。这些数字讲述了一个戏剧性的故事&#xff1a;今年人工智能支出飙升…...

共创共建!葡萄城 SpreadJS 完成 HarmonyOS NEXT 操作系统兼容认证

最新技术资源&#xff08;建议收藏&#xff09; https://www.grapecity.com.cn/resources/ 近日&#xff0c;华为“企业工作必备应用鸿蒙化论坛”在北京圆满落幕&#xff0c;论坛汇聚了众多行业精英和合作伙伴&#xff0c;聚焦讨论企业数字化转型与原生鸿蒙生态融合等话题。葡萄…...

webAPI clean architecture

文章目录 项目地址一、Restaurants.Domain 核心业务层1.1 Entities实体层1.2 Repositories 数据操作EF的接口二、Restaurants.Infrastructure 基础设施层2.1 Persistence 数据EF CORE配置2.2 Repositories 数据查询实现2.3 Extensions 服务注册三、Restaurants.Application用例…...

JS使用random随机数实现简单的四则算数验证

1.效果图 2.代码实现 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…...

在Linux中使用`scp`进行远程目录文件复制

在Linux系统中&#xff0c;scp&#xff08;安全复制协议&#xff09;是一个使用SSH&#xff08;安全外壳协议&#xff09;进行文件和目录安全传输的命令。它允许在远程主机之间复制文件和目录&#xff0c;具有很强的安全性&#xff0c;是一种常用的文件传输工具。以下是如何使用…...

【C++游记】string的使用和模拟实现

枫の个人主页 你不能改变过去&#xff0c;但你可以改变未来 算法/C/数据结构/C Hello&#xff0c;这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕&#xff0c;我们继续来学习C的内容呀。C是接近底层有比较经典的语言&#xff0c;因此学习起来注定枯燥无味&#xf…...