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

oneplus3t-lineage-14编译-android7

lineageOS-14.1-oneplus3t-build.md

lineageOS-14(android7)的开发者模式/usb调试(adb)有root功能, 而lineageOS-16(android9)无

oneplus3t-lineage-14编译-android7

1

清华linageos镜像

x

lineage-14.1-20180223-nightly-oneplus3-signed.zip

ntfs分区挂载为普通用户目录 , ext4分区挂载为普通用户目录

bfsu/lineageOS镜像

ts/lingeageOS镜像

oneplus3/lineage-build-simple-manual.md, manifest-parser/git-repo#6_build, LineageOS16_oneplus3t_gitRepoLs_clone_desc.pdf

LineageOS/android.git/cm-14.1 : 改为bfsu镜像

高通私有驱动 TheMuppets/proprietary_vendor_oneplus.git/cm-14.1/oneplus3 == TheMuppets/proprietary_vendor_oneplus/.git/8b8001

1. 仓库群下载工具准备


D=/OP3TLos14Build
cd $Dgit clone -b v2.50.1 https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
#file /OP3TLos14Build/git-repo/.git/config
#file  /OP3TLos14Build/git-repo/repoexport GitRepoD=/OP3TLos14Build/git-repo
export PATH_BASE=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH=$PATH_BASE:$GitRepoDwhich repo  # == /OP3TLos14Build/git-repo/repo

2. 仓库群下载

LosVer=cm-14.1#repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b cm-14.1 --git-lfsexport REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
#manifest_repo=https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git
#manifest_repo=https://mirrors.bfsu.edu.cn/git/lineageOS/LineageOS/android.git
manifest_repo=https://gitlab.com/cm-14/android.git #已修改AOSP为国内镜像
repo init --manifest-url $manifest_repo --manifest-branch $LosVer --git-lfsrepo sync

循环显示所有仓库 : repo forall -c 'echo $PWD; echo $(git remote get-url $(git remote)) ; git reset --hard'

2b 我修改的代码

修改/OP3Los14Build/frameworks/base/.git/config origin url为: https://gitlab.com/lineage14_1_oneplus3t/android_frameworks_base.git

3. 下载oneplus3相关仓库

packages/resources/devicesettings

git clone -b $LosVer  https://github.com/LineageOS/android_packages_resources_devicesettings.git  $D/packages/resources/devicesettings#若路径写错为 $D/packages/resources , mak bacon收到如下报错(在日志中距离很远):
# ERROR: resource directory 'device/oppo/common/configpanel/../../../../packages/resources/devicesettings/res' does not exist
#  其中 device/oppo/common/configpanel/../../../../packages/resources/devicesettings/res  ==  packages/resources/devicesettings/res
#   提示 了 android_packages_resources_devicesettings.git 的正确路径是  packages/resources/devicesettings

oneplus3高通私有驱动(vendor)下载 方法1: 不用此法

下载 git仓库,但仓库有将近10个GB,因此不用此方法

注意: 目录TheMuppets-proprietary_vendor_oneplus 不要放在 /OP3TLos14Build 下, 否则 会被 mka showcommands bacon认为和 软链接/OP3TLos14Build/vendor/oneplus/oneplus3 重复了。 这可能是cm-14.1的问题, 貌似 LinageOS-16无此问题.

#命令目标: 构造软链接:  $D/vendor/oneplus/oneplus3 --> /app/TheMuppets-proprietary_vendor_oneplus/oneplus3#D=/OP3TLos14Build
#LosVer=cm-14.1
proprD=/app
proprietary_vendor_oneplus=$proprD/TheMuppets-proprietary_vendor_oneplus
git clone https://githubfast.com/TheMuppets/proprietary_vendor_oneplus.git -b  $LosVer $proprietary_vendor_oneplus
#命令展开: git clone https://githubfast.com/TheMuppets/proprietary_vendor_oneplus.git -b  cm-14.1  /app/TheMuppets-proprietary_vendor_oneplus
ln -s $proprietary_vendor_oneplus/oneplus3  $D/vendor/oneplus/oneplus3
#命令展开:ln -s /app/TheMuppets-proprietary_vendor_oneplus/oneplus3  /OP3TLos14Build/vendor/oneplus/oneplus3

oneplus3高通私有驱动(vendor)下载: 方法2: git仓库给定版本包

注意: 目录proprietary_vendor_oneplus-cm-14.1 不要放在 /OP3TLos14Build 下, 否则 会被 mka showcommands bacon认为和 软链接/OP3TLos14Build/vendor/oneplus/oneplus3 重复了。 这可能是cm-14.1的问题, 貌似 LinageOS-16无此问题.

#命令目标: 构造软链接:  $D/vendor/oneplus/oneplus3 --> /app/proprietary_vendor_oneplus-cm-14.1/oneplus3#D=/OP3TLos14Build
#LosVer=cm-14.1
proprD=/app
wget --output-document=$D/cm-14.1.zip    https://github.com/TheMuppets/proprietary_vendor_oneplus/archive/refs/heads/$LosVer.zip
#命令展开: wget https://github.com/TheMuppets/proprietary_vendor_oneplus/archive/refs/heads/cm-14.1.zip
sha256sum  $D/cm-14.1.zip   #==f008b553dceac26b0feb26fdbda15c7c620ec4e3103c67b749a32900c83a55ec  
unzip $D/$LosVer.zip -d $proprD
#命令展开: unzip /OP3TLos14Build/cm-14.1.zip -d /app/
#解压产物目录为 /app/proprietary_vendor_oneplus-cm-14.1
file /app/proprietary_vendor_oneplus-cm-14.1/oneplus3/Android.mk  #解压产物列举
mkdir -p $D/vendor/oneplus
ln -s $proprD/proprietary_vendor_oneplus-cm-14.1/oneplus3 $D/vendor/oneplus/oneplus3
#命令展开: ln -s /app/proprietary_vendor_oneplus-cm-14.1/oneplus3 /OP3TLos14Build/vendor/oneplus/oneplus3

device/oneplus/oneplus3, device/oppo/common, kernel/oneplus/msm8996, packages/resources


#D=/OP3TLos14Build
#LosVer=cm-14.1git clone -b $LosVer  https://github.com/LineageOS/android_device_oneplus_oneplus3.git  $D/device/oneplus/oneplus3
git clone -b $LosVer  https://github.com/LineageOS/android_device_oppo_common.git       $D/device/oppo/common
git clone -b $LosVer  https://github.com/LineageOS/android_kernel_oneplus_msm8996.git   $D/kernel/oneplus/msm8996

4. 编译错误解决

0. 为方便排查错误 , 将编译进程数改为1 : 失败

sudo pstree -caplT 查看进程树

find /OP3TLos14Build/build/ -type f | xargs -I@ grep -Hn -i "\-j " @

/OP3TLos14Build/build/kati/flags.cc:104:        ERROR("Invalid -j flag: %s", num_jobs_str);
/OP3TLos14Build/build/kati/flags.cc:110:        ERROR("Invalid -j flag: %s", num_jobs_str);
/OP3TLos14Build/build/core/ninja.mk:128:# limited by the -j flag passed to GNU make.
/OP3TLos14Build/build/tools/makeparallel/Makefile:76:	@EXPECTED=""       $(MAKEPARALLEL_NINJA_TEST) -j -l

find /OP3TLos14Build/build/ -type f -name "*.mk" | xargs -I@ grep -Hn -i "job" @

/OP3TLos14Build/build/core/ninja.mk:129:NINJA_REMOTE_NUM_JOBS ?= 500
/OP3TLos14Build/build/core/ninja.mk:130:NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)

/OP3TLos14Build/build/core/ninja.mk中的NINJA_REMOTE_NUM_JOBS ?= 500改为NINJA_REMOTE_NUM_JOBS = 1

编译命令中的mka改为mk, -j8 改为 -j1

source build/envsetup.sh && export LC_ALL=C && export ALLOW_MISSING_DEPENDENCIES=true && lunch lineage_oneplus3-userdebug && export MAKE_OPTS="-j1" && export TARGET_ARCH=arm && mk bacon

则 确为单进程编译? 不确定,未验证

1.multiple definition of ‘yylloc’

解决编译错误, /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of 'yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here

#D=/OP3TLos14Build
grep url  $D/kernel/oneplus/msm8996/.git/config 
#	url = https://github.com/LineageOS/android_kernel_oneplus_msm8996.git
echo 'HOSTCFLAGS += -fcommon' >> $D/kernel/oneplus/msm8996/Makefile

2. Jack server

解决报错 Communication error with Jack server (56). Try 'jack-diagnose'


export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx6G"

5A. 编译依赖工具安装

#所用linux发行版
cat /etc/issue #Ubuntu 22.04.4 LTS \n \l#查找deb包
sudo apt install -y apt-file
sudo apt-file update

lunch lineage_oneplus3-userdebug需要的

sudo apt install -y build-essential 
sudo apt install -y python2.7
sudo ln -s /usr/bin/python2.7 /usr/bin/python

mka bacon 需要的

1
apt-file search "/schedtool" 
#schedtool: /usr/bin/schedtool             
sudo apt install -y schedtool
2
apt-file search "/libncurses.so.5"
#libncurses5: /lib/x86_64-linux-gnu/libncurses.so.5
sudo apt install -y libncurses5
3

下载 https://static.azul.com/zulu/bin?C=S/zulu8.82.0.21-ca-jdk8.0.432-linux_x64.tar.gz

#查找jdk8的最新版本为  zulu8.82.0.21-ca-jdk8.0.432-linux_x64.tar.gz
pageUrl_azul_jdkLs="https://static.azul.com/zulu/bin?C=S"
alias alias_grep_jdk8_linux_x64_tar_gz_sort_head_n='grep jdk8 | grep linux_x64.tar.gz | sort  --reverse  | head -n'
w3m -T text/html $pageUrl_azul_jdkLs   -dump | alias_grep_jdk8_linux_x64_tar_gz_sort_head_n 2
#[ ]         zulu8.82.0.21-ca-jdk8.0.432-linux_x64.tar.gz               2024-10-10 102M
#[ ]         zulu8.82.0.21-ca-fx-jdk8.0.432-linux_x64.tar.gz            2024-10-23 173M#下载zulu8.82.0.21-ca-jdk8.0.432-linux_x64.tar.gz 
( cd /app/pack/ &&  wget https://static.azul.com/zulu/bin/zulu8.82.0.21-ca-jdk8.0.432-linux_x64.tar.gz  )#解压
tar -xf zulu8.82.0.21-ca-jdk8.0.432-linux_x64.tar.gz  -C /app/#测试
/app/zulu8.82.0.21-ca-jdk8.0.432-linux_x64/bin/javac -version
#javac 1.8.0_432
4
apt-file  search "/ImageMagick"
sudo apt install -y imagemagick 
#不是  libmagickcore-dev libmagick++-dev
5

prebuilts/misc/linux-x86/bison/bison 是32位ELF,

而ubuntu22 默认只支持64位ELF, 因此 要安装32位兼容库

prebuilts/misc/linux-x86/bison/bison --help #报错 说`No such file or directory` , 实际是因为没有32位ELF加载器ldsudo dpkg --add-architecture i386
sudo apt updatesudo apt install -y libc6:i386  libstdc++6:i386 
prebuilts/misc/linux-x86/bison/bison --help #正常运行
6.

报错命令:

prebuilts/misc/linux-x86/bison/bison -d  --defines=/OP3TLos14Build/out/host/linux-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_y.h -o /OP3TLos14Build/out/host/linux-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_y.cpp system/tools/aidl/aidl_language_y.yy
#prebuilts/misc/linux-x86/bison/bison: m4 subprocess failed: No such file or directory

解决

sudo apt install -y m4
7. javadoc报错不影响编译 : error: package android.support.v14.preference does not exist

source build/envsetup.sh && export LC_ALL=C && export ALLOW_MISSING_DEPENDENCIES=true && lunch lineage_oneplus3-userdebug && export MAKE_OPTS="-j8" && export TARGET_ARCH=arm && mka showcommands bacon 报错:

cat -n OP3-cm14_1-screen-2025-01-18-17-58-22.log | grep -i "error:"

注意 此报错是javadoc命令报错, 不影响继续编译, 因此可以忽略此错误

  8868	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingSwitchPreference.java:19: error: package android.support.v14.preference does not exist8871	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingSwitchPreference.java:20: error: package android.support.v7.preference does not exist8874	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingSwitchPreference.java:27: error: cannot find symbol8878	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:27: error: package android.support.v7.preference does not exist8881	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:28: error: package android.support.v7.preference does not exist8884	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:29: error: package android.support.v7.preference does not exist8887	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:30: error: package android.support.v7.preference does not exist8890	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingSwitchPreference.java:47: error: cannot find symbol8895	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:61: error: cannot find symbol8900	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:71: error: cannot find symbol8905	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:100: error: cannot find symbol8910	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:100: error: cannot find symbol8915	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:104: error: cannot find symbol8920	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:104: error: cannot find symbol8925	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:104: error: cannot find symbol8930	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:299: error: cannot find symbol8935	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingListPreference.java:19: error: package android.support.v7.preference does not exist8938	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingListPreference.java:20: error: package android.support.v7.preference does not exist8941	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingListPreference.java:27: error: cannot find symbol8945	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingListPreference.java:47: error: cannot find symbol8950	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingDropDownPreference.java:19: error: package android.support.v7.preference does not exist8953	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingDropDownPreference.java:20: error: package android.support.v7.preference does not exist8956	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingDropDownPreference.java:27: error: cannot find symbol8960	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingDropDownPreference.java:47: error: cannot find symbol8965	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:351: error: cannot find symbol8970	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:351: error: cannot find symbol8975	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:351: error: cannot find symbol8980	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:355: error: cannot find symbol8985	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:355: error: cannot find symbol8990	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:355: error: cannot find symbol8995	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:369: error: cannot find symbol9000	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:369: error: cannot find symbol9005	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/ConstraintsHelper.java:377: error: cannot find symbol9010	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/RemotePreference.java:26: error: package android.support.v7.preference does not exist9013	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingPreference.java:19: error: package android.support.v7.preference does not exist9016	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingPreference.java:20: error: package android.support.v7.preference does not exist9019	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingPreference.java:21: error: package android.support.v7.preference does not exist9022	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingPreference.java:28: error: cannot find symbol9026	vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingPreference.java:52: error: cannot find symbol

简要确认此报错是javadoc命令产生的
cat -n OP3-cm14_1-screen-2025-01-18-17-58-22.log | grep -B 1 -i "vendor/cmsdk/sdk/src/java/cyanogenmod/preference/SelfRemovingSwitchPreference.java:19: error: package android.support.v14.preference does not exist" | grep javadoc 匹配到javadoc命令

8. ninja: build stopped: subcommand failed.需要具体排查

wc -l OP3-cm14_1-screen-2025-01-18-17-58-22.log == 85313

cat -n OP3-cm14_1-screen-2025-01-18-17-58-22.log | tail -n 8 有报错

 85306	ninja: build stopped: subcommand failed.85307	make: *** [build/core/ninja.mk:152: ninja_wrapper] Error 185308	make: Leaving directory '/OP3TLos14Build'85309	85310	#### make failed to build some targets (02:06:05 (hh:mm:ss)) ####

如果能将ninja的并发数改为1, 报错行将会大大靠近结果, 排查难道会降低

8.1 查找 error: (排除)

grep -Hn -i "error:" OP3-cm14_1-screen-2025-01-18-17-58-22.log : 获得的是 7 中的javadoc报错(不影响继续编译)

8.2 查找command not found(疑似)

grep -Hn "command not found" OP3-cm14_1-screen-2025-01-18-17-58-22.log

85296: /bin/bash: line 1: xmllint: command not found 距离 85306 ninja: build stopped: subcommand failed. 只有10行, 因此 可能是此报错

解决

apt-file search --regexp "/xmllint$"
#libxml2-utils: /usr/bin/xmllint
sudo apt install -y libxml2-utils

5B. github加速

加速githubusercontent(可选)

githubusercontent 后加s

#D=/OP3TLos14Build
sed -i 's/raw.githubusercontent.com/raw.githubusercontents.com/g' $D/vendor/cm/vendorsetup.sh

提高 source build/envsetup.sh速度

已修改在: lineage14_1_oneplus3t/android_vendor_cm.git/3a218

5. 编译


screen -L  -Logfile ~/OP3-cm14_1-screen-$(date +%Y-%m-%d-%H-%M-%S).log -S OP3#编译步骤正文 开始
D=/OP3TLos14Build
cd $Djdk8_d=/app/zulu8.82.0.21-ca-jdk8.0.432-linux_x64
export PATH_BASE=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH=$PATH_BASE:$jdk8_d/binexport ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx6G"#单行编译命令 开始
source build/envsetup.sh#export V=1
export LC_ALL=C
export ALLOW_MISSING_DEPENDENCIES=true
#export DEBUG_MODULE_android_runtime=true
#export TARGET_CUSTOM_DEBUG_CFLAGS="-O0 -g" 
#export MAKE_OPTS="-j8" 
#export TARGET_ARCH=arm  
lunch lineage_oneplus3-userdebug && mka showcommands bacon  # lineage_oneplus3-eng
#单行编译命令 结束#编译步骤正文 结束#离开screen但不退出快捷键: ctrl+ad#进入screen :  screen -r OP3#编译完成后 关闭 jack服务
$D/prebuilts/sdk/tools/jack-admin  stop-server

编译步骤 中 不同用途 的 单行编译命令

完整编译

source build/envsetup.sh && export LC_ALL=C &&   export ALLOW_MISSING_DEPENDENCIES=true && lunch lineage_oneplus3-userdebug   && export MAKE_OPTS="-j8" && export TARGET_ARCH=arm  && mka showcommands bacon

6 编译产物(ota rom卡刷包)

ls -lh /OP3TLos14Build/out/target/product/oneplus3/lineage-14.1-20250117-UNOFFICIAL-oneplus3.zip
# -rw-rw-r--   506M    source /app/bash-simplify/android_aid/env/android9.0-platform-tools-env.sh  && android9_0_platformTools_envfastboot boot /oneplus3t/twrp-3.2.1-0-oneplus3.img
#twrp界面:  Wipe所有, Advance --> adb sideload (勾选清理所有)adb sideload /OP3TLos14Build/out/target/product/oneplus3/lineage-14.1-20250117-UNOFFICIAL-oneplus3.zipadb reboot
#重启手机, linageOS图标 大约转了30圈 才进入 android首次安装界面

7. lineageOS-14/ adb root

lineageOS-14(android7)的开发者模式/usb调试(adb)启用root功能

adb root shell
adb shell

进入root shell, 比如可以挂载system分区为可读可写

lineageOS-17的adb 进不到root shell, 只能重启到twrp 才能进到root shell

mount -o remount,rw /system
echo zzz >  /system/test_file_1
rm -v /system/test_file_1mount -o remount,ro /system

备注

一般备注

grep url  $D/.repo/manifests/.git/config 
#	url = https://gitlab.com/cm-14/android.git#查看screen日志
tail -f ~/OP3-screen-*.log#关机命令
sleep 60 ;  cd /tmp; echo z |sudo -S umount /OP3TLos14Build ; echo z |sudo -S umount /mnt/OP3TLos14Build ;  echo z |sudo -S  poweroff

确认版本号 为 cm-14.1

cd /tmp/
git clone https://mirrors.bfsu.edu.cn/git/lineageOS/LineageOS/android.git
cd /tmp/android/git --no-pager branch  --all  | grep cm-14.1  # == remotes/origin/cm-14.1
git --no-pager tag --list  | grep cm-14.1 #无

相关文章:

oneplus3t-lineage-14编译-android7

lineageOS-14.1-oneplus3t-build.md lineageOS-14(android7)的开发者模式/usb调试(adb)有root功能, 而lineageOS-16(android9)无 oneplus3t-lineage-14编译-android7 1 清华linageos镜像 x lineage-14.1-20180223-nightly-oneplus3-signed.zip ntfs分区挂载为普通用户目录…...

Spring Boot与Spring的区别

在当今的Java开发领域,Spring框架无疑是最为重要且广泛应用的框架之一。而随着技术的不断发展和开发者对效率与便捷性的追求,基于Spring框架的Spring Boot应运而生。接下来,将详细阐述Spring Boot与Spring的主要区别,并通过实际的…...

阿九的python 爬虫进阶课18.3 学习笔记

文章目录 前言1. 爬取大标题2. 爬取小标题3. 证券栏下的标题4. 某篇文章里的具体内容 前言 网课链接:https://www.bilibili.com/video/BV1kV4y1576b/新浪财经网址:https://finance.sina.com.cn/需先下载库: conda install lxml布置爬取的一…...

对人型机器人的研究和展望

目录 概述 1 核心软硬件部件 1.1 运动控制部分 1.1.1 减速机 1.1.2 编码器 1.1.3 直流无刷电机 1.2 智能仿生手 1.3 控制板卡 2 人型机器人的应用 3 未来展望 概述 如果现在有人问:当前那个行业最火?毫无疑问答案肯定是人型机器人了。当前各类机…...

docker 使用远程镜像启动一个容器

使用前提: 首先你得安装docker,其次你得拥有一个远程镜像 docker run --name io_11281009 --rm -it -p 2233:22 -v .:/root/py -e ed25519_rootAAAAC3NzaC1lZDI1********Oy7zR7l7aUniR2rul ghcr.lizzie.fun/fj0r/io srv对上述命令解释: 1.docker run:…...

VTK知识学习(37)-频域处理

1、前言 在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的性质对转换后的数据进行分析处理。图像频域处理借助空间变换将图像从图像空间转换到频域空间,根据频域空间的性质对数据进行处理(如滤波),最…...

什么是软件架构

什么是软件架构 程序员说,软件架构是要决定编写哪些C程序或OO类、使用哪些库和框架 程序经理说,软件架构就是模块的划分和接口的定义 系统分析员说,软件架构就是为业务领域对象的关系建模 配置管理员说,软件架构就是开发出来的…...

RoCE网络及其协议栈详解(没有中间商赚差价的网络)

引言 随着数据中心对高性能、低延迟通信需求的不断增长,传统的TCP/IP以太网连接已经难以满足现代应用的要求。为了解决这些问题,RDMA(Remote Direct Memory Access)技术应运而生。RDMA是一种允许网络中的不同计算机直接访问对方内…...

el-dialog弹窗的@open方法中,第一次引用ref发现undefined问题,第二次后面又正常了

解决方法 直接不用这个open方法&#xff0c;转而用opened&#xff0c;代码例子&#xff1a; <el-dialog title"单个新增" :visible.sync"PlacardShowSingle" opened"openpbSingle()" width"1100px" top"1%" :close-on-c…...

基于阿里云视觉智能平台实现换脸程序

简介 阿里云视觉智能平台提供了一种强大的换脸功能&#xff0c;能够将视频中的人脸替换成其他图片中的脸。这种功能广泛应用于视频编辑、特效制作等领域。本文将介绍如何使用阿里云视觉智能平台进行视频换脸。 核心工作流程 整个换脸程序的实现可分为以下几个主要步骤&#…...

【2024年华为OD机试】(A卷,100分)- 完美走位 (Java JS PythonC/C++)

一、问题描述 题目解析 题目描述 在第一人称射击游戏中,玩家通过键盘的 A、S、D、W 四个按键控制游戏人物分别向左、向后、向右、向前进行移动。假设玩家每按动一次键盘,游戏人物会向某个方向移动一步。如果玩家在操作一定次数的键盘并且各个方向的步数相同时,此时游戏人…...

一文夯实垃圾收集的理论基础

如何判断一个引用是否存活 引用计数法 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它&#xff0c;计数器就加 1&#xff1b;当引用失效&#xff0c;计数器就减 1&#xff1b;任何时候计数器为 0 的对象就是不可能再被使用的。 优点&#xff1a;可即刻回收垃圾&a…...

jenkins-api操作

一. 简述&#xff1a; 在一个比较复杂的环境中&#xff0c; 往往会有自己开发的运维管理平台。在代码发布这块&#xff0c;尽管jenkins有一个比较方便的UI&#xff0c; 但很多团队还是喜欢集中式管理&#xff0c; 将发布功能(仅仅把jenkins作为一个发布组件使用)嵌入运维管理平…...

SpringBoot3+Vue3学习

什么是Spring Boot? Spring Boot 是Spring 提供的一个子项目&#xff0c;用于快速构建Spring应用程序 传统方式弊端&#xff1a;之前的项目都用Spring FrameWork构建&#xff0c;需要手动引入依赖&#xff0c;依赖之间有可能存在冲突&#xff0c;较为麻烦&#xff1b;在配置…...

SQL刷题快速入门(三)

其他章节&#xff1a; SQL刷题快速入门&#xff08;一&#xff09; SQL刷题快速入门&#xff08;二&#xff09; 承接前两个章节&#xff0c;本系列第三章节主要讲SQL中where和having的作用和区别、 GROUP BY和ORDER BY作用和区别、表与表之间的连接操作&#xff08;重点&…...

Flutter鸿蒙化中的Plugin

Flutter鸿蒙化中的Plugin 前言鸿蒙项目内PluginFlutter端实现鸿蒙端实现创建Plugin的插件类注册Plugin 开发纯Dart的package为现有插件项目添加ohos平台支持创建插件配置插件编写插件内容 参考资料 前言 大家知道Flutter和鸿蒙通信方式和Flutter和其他平台通信方式都是一样的&…...

Ubuntu 22.04.5 修改IP

Ubuntu22.04.5使用的是netplan管理网络&#xff0c;因此需要在文件夹/etc/netplan下的01-network-manager-all.yaml中修改&#xff0c;需要权限&#xff0c;使用sudo vim或者其他编辑器&#xff0c;修改后的内容如下&#xff1a; # Let NetworkManager manage all devices on …...

后端:MyBatis

文章目录 1. MyBatis1-1. Mybatis 工具类的封装1-2. Mybatis 通过集合或实体类传递参数-实现插入数据(增)1-3. MyBatis 实现删除数据(删)1-4. MyBatis 实现修改数据(改)1-5. MyBatis 实现查询数据(查) 2. MyBatis 配置文件中的一些标签和属性2-1.environments标签2-2. dataSour…...

CBAM-2018学习笔记

名称&#xff1a; Convolutional Block Attention Module (CBAM) 来源&#xff1a; CBAM: Convolutional Block Attention Module 相关工作&#xff1a; #ResNet #GoogleNet #ResNeXt #Network-engineering #Attention-mechanism 创新点&#xff1a; 贡献&#xff1a; 提…...

HTML根元素<html>的语言属性lang:<html lang=“en“>

诸神缄默不语-个人CSDN博文目录 在编写HTML页面时&#xff0c;通常会看到<html lang"en">这行代码&#xff0c;特别是在网页的开头部分&#xff0c;就在<!DOCTYPE html>后面。许多开发者可能对这个属性的含义不太了解&#xff0c;它到底有什么作用&…...

解决github无法clone的问题

问题背景 (base) ~$ git clone https://github.com/isaac-sim/IsaacLab.git 正克隆到 IsaacLab... fatal: 无法访问 https://github.com/isaac-sim/IsaacLab.git/&#xff1a;gnutls_handshake() failed: Error in the pull function.解决办法 我使用了代理&#xff0c;需要配…...

第1章:Python TDD基础与乘法功能测试

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

【华为路由/交换机的ftp文件操作】

华为路由/交换机的ftp文件操作 PC&#xff1a;10.0.1.1 R1&#xff1a;10.0.1.254 / 10.0.2.254 FTP&#xff1a;10.0.2.1 S1&#xff1a;无配置 在桌面创建FTP-Huawei文件夹&#xff0c;里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server&#xff0c;…...

【HBuilderX 中 Git 的使用】

目录&#xff1a; 一&#xff1a;安装必要的版本控制工具二&#xff1a;把Github上的项目克隆到本地三&#xff1a;将本地的项目上传到Github上 一&#xff1a;安装必要的版本控制工具 1️⃣ 安装 TortoiseGit 工具&#xff0c;下载地址&#xff1a;https://tortoisegit.org/do…...

语言模型的价值定位与技术突破:从信息处理到创新认知

标题&#xff1a;语言模型的价值定位与技术突破&#xff1a;从信息处理到创新认知 文章信息摘要&#xff1a; 当前语言模型的核心价值主要体现在信息综合与处理能力上&#xff0c;用户友好的交互界面是其成功关键。在模型计算机制方面&#xff0c;推理能力的实现包括chain-of-…...

使用Websocket进行前后端实时通信

1、引入jar&#xff0c;spring-websocket-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2、配置websocket config import org.springframe…...

【Leetcode 热题 100】70. 爬楼梯

问题背景 假设你正在爬楼梯。需要 n n n 阶你才能到达楼顶。 每次你可以爬 1 1 1 或 2 2 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 数据约束 1 ≤ n ≤ 45 1 \le n \le 45 1≤n≤45 解题过程 昨天刚刚当成扩展题做过&#xff0c;今天遇到了再写一次。…...

STM32更新程序OTA

STM32的OTA&#xff08;Over-The-Air&#xff09;更新程序是一种通过无线通信方式&#xff0c;为设备分发新软件、配置甚至更新加密密钥的技术。以下是关于STM32 OTA更新程序的详细介绍&#xff1a; 一、OTA升级流程 STM32的OTA升级流程通常包括以下几个关键步骤&#xff1a;…...

【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(三)

目录 1 -> WebAPI背景知识 1.1 -> 什么是WebAPI 1.2 -> 什么是API 1.3 -> 什么是DOM 1.3.1 -> DOM树 2 -> 获取元素 2.1 -> querySelector 2.2 -> querySelectorAll 3 -> 事件初识 3.1 -> 基本概念 3.2 -> 事件三要素 4 -> 操…...

计算机创造的奇迹——C语言

一.简介 C语言是一种较早的程序设计语言&#xff0c;诞生于1972年的贝尔实验室。1972 年&#xff0c;Dennis Ritchie 设计了C语言&#xff0c;它继承了B语言的许多思想&#xff0c;并加入了数据类型的概念及其他特性。 尽管C 语言是与 UNIX 操作系统一起被开发出来的&#xff…...

TypeScript - 利用GPT辅助学习

TypeScript 一、基础1. 安装 TypeScript2. 创建你的第一个 TypeScript 文件3. 编译 TypeScript 代码4. 变量声明与类型注解5. 函数与类型注解6. 总结 二、进阶常用类型1. 类型别名2. 对象类型3. 类型断言4.typeof 操作符 高级类型1. 类2. 交叉类型3. 泛型与 keyof4. 索引签名类…...

Node.js 与 JavaScript 是什么关系

JavaScript 是一种编程语言&#xff0c;而 Node.js 是 JavaScript 的一个运行环境&#xff0c;它们在不同的环境中使用&#xff0c;具有一些共同的语言基础&#xff0c;但也有各自独特的 API 和模块&#xff0c;共同推动着 JavaScript 在前后端开发中的广泛应用。 一、基础语言…...

Spring MVC:设置响应

目录 引言 1. 返回静态页面 1.1 Spring 默认扫描路径 1.2 RestController 1.2.1 Controller > 返回页面 1.2.2 ResponseBody 2. 返回 HTML 2.1 RequestMapping 2.1.1 produces(修改响应的 Content-Type) 2.1.2 其他属性 3. 返回 JSON 4. 设置状态码 4.1 HttpSer…...

c#实现当捕获异常时自动重启程序

首先&#xff0c;需要说明这并不是一个推荐的做法&#xff0c;只有在你确实有这样的需求时才考虑这么做。 以下是AI的回答&#xff0c;为什么不推荐这么做&#xff0c;供参考。 在C#中&#xff0c;如果你在catch语句中尝试重启程序自身&#xff0c;可能会遇到以下几个问题&…...

游戏引擎学习第84天

仓库:https://gitee.com/mrxiao_com/2d_game_2 我们正在试图弄清楚如何完成我们的世界构建 上周做了一些偏离计划的工作&#xff0c;开发了一个小型的背景位图合成工具&#xff0c;这个工具做得还不错&#xff0c;虽然是临时拼凑的&#xff0c;但验证了背景构建的思路。这个过…...

Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )

一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化&#xff1a; 文件是存储数据的一种非常基本且重要的方式。通过文件&#xff0c;我们可 以将程序运行时产生的数据永久保存下来&#xff0c;以便将来使用。 跨平台兼容性&#xff1a; 文件是一种通用…...

“AI 大模型内容安全审核软件系统:守护网络世界的卫士

在如今这个信息爆炸的互联网时代&#xff0c;网络上的内容那是五花八门、层出不穷。这时候&#xff0c;咱就得靠 AI 大模型内容安全审核软件系统来给咱把把关了。 咱就说社交媒体平台吧&#xff0c;每天都有海量的用户在上面发布文字、图片、视频啥的。要是没有一个靠谱的审核系…...

快速入门Python的异步库:asyncio

目录 异步 Python asyncio 1. async 关键字 2. await 关键字 3. asyncio.run() 4. asyncio.sleep() 5. 协程 程序执行流程 可以被等待的异步 协程 任务 Futures 任务 asyncio.create_task() await 和任务结果 Reference 异步 我们首先先来谈谈异步&#xff0c;…...

大美祖国-使用Java盘点那些在地名中出现最多的汉字

目录 前言 一、地名数据准备 1、全国地名数据 二、使用Java进行汉字统计 1、汉字数据统计 2、汉字分割统计 三、浅谈地名汉字名次及其意义 1、山、城、江、河 2、安、平、宁 3、地名中的方位 四、总结 前言 在中国这片古老而又年轻的土地上&#xff0c;地名不仅仅是地…...

华为OD机试E卷 --羊、狼、农夫过河--24年OD统一考试(Java JS Python C C++)

文章目录 题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述 羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫则会损失羊。农夫有一艘容量固定的船,能够承载固定数量的动物。 要求求出不损失羊情况…...

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议&#xff0c;用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接&#xff0c;这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发&#xff0c;并于2…...

JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码

1. 生鲜后台管理系统-注册功能 1.1. 注册功能 &#xff08;1&#xff09;创建注册RegisterServlet&#xff0c;接收form表单中的参数。   &#xff08;2&#xff09;service创建一个userService处理业务逻辑。   &#xff08;3&#xff09;RegisterServlet将参数传递给ser…...

【深度学习】利用Java DL4J 训练金融投资组合模型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...

【MySQL篇】事务的认识以及四大特性

何为事务&#xff1f; 事务&#xff08;Transaction&#xff09;是指一组操作的集合&#xff0c;这些操作要么全部执行成功&#xff0c;要么全部不执行。事务通常用于保证数据库的一致性、完整性和可靠性&#xff0c;确保数据的完整性与正确性。 有效避免部分执行&#xff0…...

CSS 网络安全字体

适用于 HTML 和 CSS 的最佳 Web 安全字体 下面列出了适用于 HTM L和 CSS 的最佳 Web 安全字体&#xff1a; Arial (sans-serif)Verdana (sans-serif)Helvetica (sans-serif)Tahoma (sans-serif)Trebuchet MS (sans-serif)Times New Roman (serif)Georgia (serif)Garamond (se…...

实战演示:利用ChatGPT高效撰写论文

在当今学术界&#xff0c;撰写论文是一项必不可少的技能。然而&#xff0c;许多研究人员和学生在写作过程中常常感到困惑和压力。幸运的是&#xff0c;人工智能的快速发展为我们提供了新的工具&#xff0c;其中ChatGPT便是一个优秀的选择。本文将通过易创AI创作平台&#xff0c…...

显卡(Graphics Processing Unit,GPU)架构详细解读

显卡架构主要分为两大类&#xff1a;GPU 核心架构&#xff08;也称为图形处理单元架构&#xff09;和显卡的其他组件&#xff08;如内存、控制器、输出接口等&#xff09;。本篇文章将对显卡架构进行详细分析&#xff0c;重点介绍 GPU 核心架构、显卡计算单元、显存结构、显卡管…...

OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap&#xff08;使用单位矩阵 R…...

人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)

Softmax回归听名字&#xff0c;依然好像是做回归任务的算法&#xff0c;但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类&#xff0c;足球比赛胜平负就是多分类 识别手写数字0和1是二分类&#xff0c;识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…...

【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO

文章目录 前言&#x1f30d; 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术&#x1f341;3.1关键特性&#x1f341;3.2配置选项&#x1f341;3.3使用示例 ❄️4. 连接池之Druid技术&#x1f341; 4.1主要特性&#x1f341; 4.2 配置选项…...