首页
关于
壁纸
直播
留言
友链
统计
Search
1
《三国志英杰传》攻略
6,034 阅读
2
Emby客户端IOS破解
5,767 阅读
3
白嫖Emby
5,764 阅读
4
《吞食天地1》金手指代码
4,691 阅读
5
破解emby-server
4,039 阅读
moonjerx
game
age-of-empires
zx3
san-guo-zhi
尼尔:机械纪元
net
emby
learn-video
docker
torrent
photoshop
route
minio
git
ffmpeg
im
vue
gitlab
typecho
svn
alipay
nasm
srs
mail-server
tailscale
kkfileview
aria2
webdav
synology
redis
oray
chemical
mxsite
math
π
x-ui
digital-currency
server
nginx
baota
k8s
http
cloud
linux
shell
database
vpn
esxi
rancher
domain
k3s
ewomail
os
android
windows
ios
app-store
macos
develop
java
javascript
uniapp
nodejs
hbuildx
maven
android-studio
jetbrain
jenkins
css
mybatis
php
python
hardware
hard-disk
pc
RAM
software
pt
calibre
notion
office
language
literature
philosophy
travel
登录
Search
标签搜索
ubuntu
mysql
openwrt
zerotier
springboot
centos
openvpn
jdk
吞食天地2
synology
spring
idea
windows11
吞食天地1
transmission
google-play
Japanese
xcode
群晖
kiftd
MoonjerX
累计撰写
370
篇文章
累计收到
459
条评论
首页
栏目
moonjerx
game
age-of-empires
zx3
san-guo-zhi
尼尔:机械纪元
net
emby
learn-video
docker
torrent
photoshop
route
minio
git
ffmpeg
im
vue
gitlab
typecho
svn
alipay
nasm
srs
mail-server
tailscale
kkfileview
aria2
webdav
synology
redis
oray
chemical
mxsite
math
π
x-ui
digital-currency
server
nginx
baota
k8s
http
cloud
linux
shell
database
vpn
esxi
rancher
domain
k3s
ewomail
os
android
windows
ios
app-store
macos
develop
java
javascript
uniapp
nodejs
hbuildx
maven
android-studio
jetbrain
jenkins
css
mybatis
php
python
hardware
hard-disk
pc
RAM
software
pt
calibre
notion
office
language
literature
philosophy
travel
页面
关于
壁纸
直播
留言
友链
统计
搜索到
68
篇与
develop
的结果
2024-11-11
Java面试一
面试概况本次面试为快手商业化部门日常实习生的一轮面试,面试时长约为40分钟。面试内容主要集中在Java基础知识、数据库、并发编程、算法等方面。以下是详细的面试问题及回答整理。面试问题及回答1. Java 的集合类知道哪些?Java 的集合类主要分为以下几类:List:有序集合,允许重复元素。常见实现类有 ArrayList、LinkedList、Vector。Set:不允许重复元素的集合。常见实现类有 HashSet、LinkedHashSet、TreeSet。Map:键值对集合,键唯一但值可以重复。常见实现类有 HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap。Queue:队列集合,支持 FIFO(先进先出)操作。常见实现类有 LinkedList、PriorityQueue、ArrayDeque。2. 说说 HashMap?HashMap 是 Java 中常用的集合类,基于哈希表实现,允许存储键值对。其主要特点如下:无序存储:HashMap 不保证元素的顺序。允许空键和空值:但最多只能有一个空键。线程不安全:在多线程环境下使用 HashMap 可能会导致数据不一致。时间复杂度:插入、删除、查找操作的时间复杂度均为 O(1)(理想情况下)。3. HashMap 线程安全吗,如何变线程安全?HashMap 本身是线程不安全的。可以通过以下几种方式使其线程安全:使用 Collections.synchronizedMap:将 HashMap 包装成线程安全的 Map。Map<String, String> map = Collections.synchronizedMap(new HashMap<>());使用 ConcurrentHashMap:ConcurrentHashMap 是线程安全的 Map 实现,性能优于 Hashtable。Map<String, String> map = new ConcurrentHashMap<>();手动同步:在访问 HashMap 的地方手动加锁。synchronized (map) { map.put(key, value); }4. ConcurrentHashMap 如何实现的?ConcurrentHashMap 通过分段锁(Segment)机制实现线程安全。具体实现如下:分段锁:将整个哈希表分成多个段(Segment),每个段内部是一个小的哈希表。锁粒度:每次操作只锁定当前段,而不是整个哈希表,提高了并发性能。JDK 1.8 改进:取消了 Segment,改为使用 CAS 操作和锁竞争机制,进一步提高了性能。5. synchronized 原理以及升级过程synchronized 是 Java 中的内置锁,用于实现线程同步。其原理如下:锁的状态:锁有四种状态,依次是无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。锁升级:锁可以从较低状态升级到较高状态,但不能降级。无锁状态:没有任何线程持有锁。偏向锁:偏向于第一个获取锁的线程,减少锁的竞争。轻量级锁:使用 CAS 操作尝试获取锁,如果失败则升级为重量级锁。重量级锁:使用操作系统互斥量实现,性能较差。6. 线程池的参数?ThreadPoolExecutor 是 Java 中创建线程池的类,其构造方法参数如下:corePoolSize:核心线程数。maximumPoolSize:最大线程数。keepAliveTime:线程空闲时间。unit:keepAliveTime 的时间单位。workQueue:任务队列,用于存储等待执行的任务。threadFactory:线程工厂,用于创建线程。handler:拒绝策略,当任务队列满且线程数达到最大值时的处理策略。7. full gc, minor gc?Minor GC:回收年轻代(Young Generation)的垃圾收集操作。当年轻代空间不足时触发。Full GC:回收整个堆(包括年轻代和老年代)的垃圾收集操作。通常在以下情况下触发:老年代空间不足。系统显式调用 System.gc()。Minor GC 时发现老年代空间不足。8. 垃圾回收算法?常见的垃圾回收算法有:标记-清除:标记所有需要回收的对象,然后清除这些对象。标记-整理:标记所有需要回收的对象,然后将存活对象移动到一端,清除边界外的对象。复制:将内存分为两个区域,每次只使用其中一个区域,将存活对象复制到另一个区域。分代收集:将内存分为年轻代和老年代,分别使用不同的回收算法。9. CPU 密集型和 IO 密集型下如何设置核心线程数?CPU 密集型:任务主要消耗 CPU 资源,核心线程数一般设置为 CPU 核心数 + 1。int corePoolSize = Runtime.getRuntime().availableProcessors() + 1;IO 密集型:任务主要消耗 I/O 资源,核心线程数一般设置为 CPU 核心数 * 2。int corePoolSize = Runtime.getRuntime().availableProcessors() * 2;10. 聚簇索引和非聚簇索引区别聚簇索引:数据行的物理存储顺序与索引顺序一致。一个表只能有一个聚簇索引。查询速度快,但插入、删除、更新操作较慢。非聚簇索引:数据行的物理存储顺序与索引顺序无关。一个表可以有多个非聚簇索引。查询速度相对较慢,但插入、删除、更新操作较快。11. MySQL 的各个隔离级别,以及分别解决了什么问题MySQL 的事务隔离级别有四种:读未提交(Read Uncommitted):最低隔离级别,允许脏读。读已提交(Read Committed):允许不可重复读,但不允许脏读。可重复读(Repeatable Read):默认隔离级别,允许幻读,但不允许脏读和不可重复读。串行化(Serializable):最高隔离级别,不允许脏读、不可重复读和幻读。12. Redis 有什么数据类型Redis 支持多种数据类型:字符串(String):最基本的类型,可以存储字符串、数字等。列表(List):有序集合,支持从两端插入和删除操作。集合(Set):无序集合,不允许重复元素。有序集合(Sorted Set):有序集合,每个元素关联一个分数。哈希表(Hash):键值对集合,键唯一。位图(Bitmap):用于处理位级别的操作。HyperLogLog:用于估算集合的基数。13. Redis 分布式锁实现?Redis 分布式锁可以通过以下几种方式实现:SETNX 命令:使用 SETNX 命令尝试获取锁。SETNX key valueEXPIRE 命令:设置锁的超时时间,防止死锁。EXPIRE key secondsLua 脚本:使用 Lua 脚本保证原子性。local key = KEYS[1] local value = ARGV[1] local expire = tonumber(ARGV[2]) if redis.call("setnx", key, value) == 1 then redis.call("expire", key, expire) return 1 else return 0 end14. 项目中的前缀树,自定义注解限频,网站优化过程前缀树(Trie):用于快速查找字符串,常用于搜索引擎、拼写检查等。自定义注解限频:通过自定义注解和 AOP 切面实现接口限流。@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface RateLimit { int limit() default 100; int time() default 1; } @Aspect @Component public class RateLimitAspect { @Around("@annotation(rateLimit)") public Object around(ProceedingJoinPoint joinPoint, RateLimit rateLimit) throws Throwable { // 限流逻辑 return joinPoint.proceed(); } }网站优化过程:前端优化:使用 CDN、压缩资源、合并文件、懒加载等。后端优化:优化数据库查询、使用缓存、减少网络请求等。服务器优化:调整 JVM 参数、优化网络配置、使用负载均衡等。15. 算法:反转链表反转链表的实现如下:public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode current = head; while (current != null) { ListNode next = current.next; current.next = prev; prev = current; current = next; } return prev; }总结本次面试涉及的知识点较为广泛,涵盖了 Java 基础、并发编程、数据库、算法等多个方面。准备面试时,建议重点复习这些知识点,并结合实际项目经验进行准备。希望这篇博客对大家有所帮助!
2024年11月11日
10 阅读
0 评论
0 点赞
2024-05-10
python发送邮件代码
import ssl import smtplib from email.utils import formataddr from email.header import Header from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def send_email(to_user, subject, content): # 创建一个MIMEMultipart对象,用于组合邮件头部和正文 mail_username='notify@example.com' mail_password='xxxxxxxxxx' smtp_server = "smtp.test.com" message = MIMEMultipart() message['From'] = formataddr(pair=('MX-Notify', mail_username)) message['To'] = to_user message['Subject'] = Header(subject, 'utf-8') # 标题 # 创建邮件正文 # text = f""" # {content} # It can be in HTML or plain text. # """ html = f""" <html> <body> <p>{content}</p> </body> </html> """ # 添加正文到邮件对象中 # message.attach(MIMEText(text, "plain")) message.attach(MIMEText(html, "html")) # 添加邮件正文 # 设置SMTP服务器和端口 smtp_server = smtp_server port = 465 # 假设使用的是SSL,如果是TLS,通常使用587 server = None # 先初始化为None try: # 创建SMTP SSL连接 context = ssl.create_default_context() context.check_hostname = False context.verify_mode = ssl.CERT_NONE server = smtplib.SMTP_SSL(smtp_server, port, context=context) # 非SSL,如果为SSL则看下面 # server = smtplib.SMTP(smtp_server) # 如果是ssl,需要加多一个端口号映射 # server = smtplib.SMTP_SSL() # server.connect(smtp_server,port,context) # 登录邮箱 server.login(mail_username, mail_password) # 发送邮件 server.sendmail(mail_username, recipient, message.as_string()) print("邮件发送成功") except Exception as e: print(f"邮件发送失败:{e}") finally: # 关闭SMTP连接 if server is not None: server.quit() # 使用示例 try: has_msg = check_fun(check_url) send_email("touser@qq.com", '检测PT开注', "这是一封测试邮件。") except Exception as e: print(f"发生错误:{e}")
2024年05月10日
42 阅读
0 评论
0 点赞
2023-10-31
【MacOS】安装JDK并配置环境变量
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home PATH=$JAVA_HOME/bin:$PATH //给环境变量赋值 export JAVA_HOME //导出使其生效 export PATH 参考链接:https://blog.csdn.net/m0_51520179/article/details/131295356
2023年10月31日
24 阅读
0 评论
0 点赞
2023-10-30
【HbuilderX】【XCode】打包App步骤踩坑
一、HbuilderX打包本地离线资源包www二、安装homebrew安装参考博客:https://www.jianshu.com/p/05dd61d7d9fa 未安装homebrew直接安装ruby会出现错误提示:{alert type="error"}错误提示: zsh: command not found: brew {/alert}/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"如果官网安装速度觉得慢,可以试试国内安装连接,序列号选择(1)/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 三、安装ruby1.查询当前可用ruby版本列表:brew search rubyLast login: Mon Oct 30 14:44:42 on console admin@SuperMac ~ % brew search ruby ==> Formulae chruby ruby-build chruby-fish ruby-completion cucumber-ruby ruby-install imessage-ruby ruby@2.6 jruby ruby@2.7 ✔ mruby ruby@3.0 mruby-cli ruby@3.1 rbenv-bundler-ruby-version rubyfmt ruby ==> Casks rubymine rubymotion2.安装指定版本rubybrew install ruby@2.7终端会提示你如果想使用最新的ruby,可以设置环境变量 export PATH="/usr/local/opt/ruby/bin:$PATH"3.检查当前ruby版本ruby -v显示结果:admin@SuperMac ~ % ruby -v ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin22]版本号依然显示2.6.1,因为环境变量没有指向最新的ruby库4.修改ruby环境变量打开用户环境变量配置文件(隐藏文件) /Users/admin/.bash_profile 先打开访达,使用分栏显示,然后按组合键 comand + shift + . 即可设置 显示/不显示 隐藏文件打开 .bash_profile 文件编辑在文末添加变量export PATH="/usr/local/opt/ruby/bin:$PATH"或者添加export PATH="/usr/local/opt/ruby@2.7/bin:$PATH"5.重新加载环境变量打开终端执行命令source ~/.bash_profile6.重新检查ruby版本,正常显示admin@SuperMac bin % ruby -v ruby 2.7.8p225 (2023-03-30 revision 1f4d455848) [x86_64-darwin22]{alert type="info"} 其实 ruby 升级完成后 gem 也会升级完成 因为 ruby 中是有 gem 的,目前 ruby 升级到 3.2.2 的话 gem install cocoapod 就会报错是因为 cocoapod 不支持这么高的 ruby CocoaPods 当前支持的 ruby 版本应该是 2.5 或更高版本。然而,根据你的错误信息,系统中安装的 ruby 版本为 3.2.0 ,这可能是不兼容的版本。所以我们需要降级 ruby 到 2.7 。{/alert}7、ruby镜像源先查看ruby镜像源gem sources-l8.替换ruby镜像源gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/9、gem升级因为降级ruby到2.7后,gem就和ruby的版本对上了,但是gem里面一些库需要升级,也就代表着gem需要升级到新的版本,这个是我们升级ruby到2.7.10后,调用gem install cocoapods后报的错,如下提示:需要gem升级到3.4.17终端执行gem升级到3.4.17:gem update --system 3.4.17升级完后查看gem版本是否升级到3.4.17gem -v四、安装Cocoapods1.安装命令gem install cocoapods -V2.检验pod是否可用打开终端输入 pod 报错提示:zsh: command not found: pod3.修改gem环境变量修改.bash_profile文件,文末添加gem路径要在终端中查看实际版本号 2.7.0export PATH="/usr/local/lib/ruby/gems/2.7.0/bin:$PATH"4.重载环境变量文件source ~/.bash_profile重新检验podadmin@SuperMac bin % pod Usage: $ pod COMMAND CocoaPods, the Cocoa library package manager. Commands: + cache Manipulate the CocoaPods cache + deintegrate Deintegrate CocoaPods from your project + env Display pod environment + init Generate a Podfile for the current directory + install Install project dependencies according to versions from a Podfile.lock + ipc Inter-process communication + lib Develop pods + list List pods + outdated Show outdated project dependencies + plugins Show available CocoaPods plugins + repo Manage spec-repositories + search Search for pods + setup Set up the CocoaPods environment + spec Manage pod specs + trunk Interact with the CocoaPods API (e.g. publishing new specs) + try Try a Pod! + update Update outdated project dependencies and create new Podfile.lock Options: --allow-root Allows CocoaPods to run as root --silent Show nothing --version Show the version of the tool --verbose Show more debugging information --no-ansi Show output without ANSI codes --help Show help banner of specified command五、修改XCode配置常见错误:{alert type="error"}(1)Provisioning profile "XX" doesn't include signing certificate “XX”(2)There are no accounts registered with Xcode.(3)To use xx的iPhone for development, enable Developer mode in Settings->Privacy & Security{/alert}打开工程项目1.修改dcloud_appkey打开如图的 info.plist 文件2.导入签名证书(1)打开设置Settings(2)登录拥有开发者权限的账号会看到个人和团队证书管理,点击 Manage Certificastes 管理证书列表(3)从苹果开发者官网创建证书和描述文件后,下载到本地,如下图(4)导入开发证书和发布证书到本地Mac上各自双击下载的证书文件(即 .cer 文件)就会看到两个iPhone证书如下(5)点击左下角 + 号导入Mac本地安装的证书后,即会展示两个证书,还有一个 Mac Installer Distribution 的证书是没用的,可以在开发者官网证书列表删除(即Revoke)2.修改配置(1)工程目录-TARGETS-GeneralMinimum DeploymentsiOS:12.0IdentityApp Category:FinanceDisplay Name:StarGuar3.国际化4.启动图、消息通知图标替换掉这几个目录下的同尺寸图片即可5.编译打包打包Archive一直到Upload前都顺利,Upload的时候突然中断提示说"info.plist"文件第n行字符错误。前面修改info.plist文件的时候就遇到过了,是由于用向日葵远程复制旧项目info.plist文件内容过来的时候会附带 Null 字样(使用Notepad--软件)的空格字符,会导致该文件在xcode里都直接打不开,更别说上传到AppleConnect了
2023年10月30日
111 阅读
0 评论
0 点赞
2023-10-27
【HbuilderX】【Android Studio】打包App步骤踩坑
一、HbuilderX打包本地离线资源包www二、安装Android Studio1.去 谷歌开发者官网 下载最新Android Studio安装包2.安装过程中会通过谷歌官方下载地址 https://dl.google.com 下载Android SDK文件,需要科学网络才能下载3.默认安装包附带的JDK版本是JDK11+以上的版本,本地安装JDK8后使用组合键 Ctrl+Shift+Alt+S 打开Project Structure->SDK Location->Gradle Settings可以切换JDK版本4.打开Dcloud官方提供的 Android-SDK@3.8.12.81924_20230817/HBuilder-Integrate-AS 工程,等待资源文件下载完毕三、Android Studio修改配置1.修改AppID和AppKey(1)HbuilderX打包好的 __UNI__XXXXXXX/www 资源包放到 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\assets\apps\ 目录下,以供打包App修改 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\assets\data\dcloud_control.xml 文件中的值,改为HbuilderX(2)打包好的www资源包文件名,形如 uni.UNIxxxxxxx (3)修改文件 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\AndroidManifest.xml 下的 dcloud_appkey 值,为dcloud官方申请提供(4)App在手机桌面显示的应用名称需要根据本地语言自动切换国际化多语言名称在目录 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\res 下复制 values 文件成多份并修改应用名称即可(5)App启动图,消息推送图标,修改目录 Android-SDK@3.8.12.81924_20230817\HBuilder-Integrate-AS\simpleDemo\src\main\res\drawable 中对应图片即可,注意尺寸大小2.gradle-6.5版本有bug,会报错主机中软件中止了一个连接,有网友提到是pc开了热点,冲突导致。关闭热点可解决。但是我台式机无热点也会如此。切换更高版本gradle解决。(6) HBuilder-Integrate-AS 工程下包含两个build.gradle文件,其中一个是 simpleDemo 工程的,这个才是需要修改配置的。 HBuilder-Integrate-AS 工程的build.gradle文件基本没改动过。3.无论切换什么版本gradle都会出现以下警告,但是不影响打包Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01 Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/014.AndroidManifest.xml文件中增加一些权限请求<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.android.simple"> <!-- 增加的内容start --> <!-- <permission android:name="android.permission.BATTERY_STATS" />--> <!-- <permission android:name="android.permission.WRITE_SETTINGS" />--> <!-- <permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />--> <!-- <permission android:name="android.permission.READ_LOGS" />--> <!-- 上架谷歌需要禁用-start --> <!-- <uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:node="remove" tools:ignore="ProtectedPermissions" />--> <!-- <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:node="remove" tools:ignore="QueryAllPackagesPermission" />--> <!-- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"/>--> <!-- 2023年8月11日 起谷歌要求应用必须以 Android 13(SDK API 级别 33) 或更高级别为目标平台,以下2个权限已被弃用--> <!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />--> <!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />--> <!-- 上架谷歌需要禁用-end --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.hardware.camera" /> <uses-permission android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 申请白名单保活,用于进程杀死 google 推送--> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> <!-- 解决某些设备不能从google play下载app的问题,声明此硬件使用并非必要--> <!-- <uses-feature android:name="android.hardware.location.gps" android:required="false"/>--> <!-- <uses-feature android:name="android.hardware.location" android:required="false"/>--> <!-- <uses-feature android:name="android.hardware.location.network" android:required="false"/>--> <!-- <uses-feature android:name="android.hardware.telephony" android:required="false"/>--> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-feature android:name="android.hardware.telephony" android:required="false" /> <!-- <uses-feature android:name="android.hardware.wifi" android:required="false"/>--> <!-- <uses-feature android:name="android.hardware.bluetooth" android:required="false"/>--> <!-- 增加的内容end --> <application android:allowBackup="true" android:allowClearUserData="true" android:icon="@drawable/icon" android:label="@string/app_name" android:largeHeap="true" android:supportsRtl="true"> <activity android:exported="true" android:name="io.dcloud.PandoraEntry" android:configChanges="orientation|keyboardHidden|keyboard|navigation" android:label="@string/app_name" android:launchMode="singleTask" android:hardwareAccelerated="true" android:theme="@style/TranslucentTheme" android:screenOrientation="user" android:windowSoftInputMode="adjustResize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:exported="true" android:name="io.dcloud.PandoraEntryActivity" android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard|smallestScreenSize|screenLayout|screenSize|uiMode" android:hardwareAccelerated="true" android:permission="com.miui.securitycenter.permission.AppPermissionsEditor" android:screenOrientation="user" android:theme="@style/DCloudTheme" android:windowSoftInputMode="adjustResize"> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <action android:name="android.intent.action.VIEW" /> <data android:scheme=" " /> </intent-filter> </activity> <meta-data android:name="dcloud_appkey" android:value="xxxxxxxxxxxxxxxxxxxxxxxxxx" /> </application> </manifest>AndroidManifest.xml中的 <activity/> 节点 android:exported 必须赋值,否则报错,dcloud官方文档赋值false节点是向dcloud申请的appKey5.官方提供的SDK包simpleDemo工程下libs中不包含录音功能需要的 audio-mp3aac-release.aar 包,缺此包打包出来的应用调用录音api会弹出h5+提示缺少录音包此包在官方提供的SDK包中目录 Android-SDK@3.8.12.81924_20230817\SDK\libs\audio-mp3aac-release.aar 6.打包出来的默认apk/aab文件名格式为 simpleDemo_release.aab ,缺乏辨识度在 build.gradle(:simpleDemo) 文件中的android节点最底部添加如下代码可以修改打包出来的apk/aab文件名apply plugin: 'com.android.application' android { compileSdkVersion 34 buildToolsVersion '30.0.3' defaultConfig { applicationId "uni.UNIxxxxxxx" minSdkVersion 21 targetSdkVersion 34 versionCode 30100 versionName "3.1.0" multiDexEnabled true ndk { // abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a' // 谷歌要求:提供了32位程序,就必须提供64位程序 abiFilters 'armeabi-v7a', 'arm64-v8a' } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } signingConfigs { config { keyAlias 'XXXAlias' keyPassword 'keyPassword' storeFile file('xxx.keystore') storePassword 'keyPassword' v1SigningEnabled true v2SigningEnabled true } } buildTypes { debug { signingConfig signingConfigs.config minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } release { signingConfig signingConfigs.config minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } aaptOptions { additionalParameters '--auto-add-overlay' ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" } //重命名输出apk/aab文件名 setProperty("archivesBaseName", "AppName_v${defaultConfig.versionName}_" + new Date().format("YYYYMMddHHmm", TimeZone.getTimeZone("GMT+08:00"))) //仅对apk有效 // android.applicationVariants.all { variant -> // variant.outputs.all { // def createTime = new Date().format("YYYYMMddHHmm", TimeZone.getTimeZone("GMT+08:00")) // def fileName = "${signingConfigs.config.keyAlias}_${buildType.name}_v${defaultConfig.versionName}_${createTime}.apk" // outputFileName = fileName // } // } } dependencies { implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: []) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' implementation 'androidx.core:core:1.1.0' implementation "androidx.fragment:fragment:1.1.0" implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'com.facebook.fresco:fresco:2.5.0' implementation "com.facebook.fresco:animated-gif:2.5.0" implementation 'com.github.bumptech.glide:glide:4.9.0' implementation 'com.alibaba:fastjson:1.2.83' implementation 'androidx.webkit:webkit:1.3.0' } 打包出来的包名示例: AppName_v3.1.0_202310270536-release.apk ,aab文件同理7.在正常build之前出现的莫名其妙问题,基本上都是gradle版本问题
2023年10月27日
97 阅读
0 评论
0 点赞
1
2
...
14
您的IP: