ubuntu搭建android编译环境

2023-11-12

本文来自linux与嵌入式技术Q群52240781

ubuntu12.04/14.04安装后搭建android编译环境

注安装的是64位ubuntu系统12.04或14.04

请安装ubuntu的LTS版即12.04或14.04(每2年发布一个LTS版),可以得到5年的更新支持,否则一般的版本只有9个月的更新支持

 

1.更新软件仓库和软件升级

点击复制按钮将以下代码复制并保存为sh后缀的shell脚本如ubuntu_embed_env_setup.sh

 然后执行/bin/bash ubuntu_embed_env_setup.sh

 

 

#! /bin/bash
# Author:			longbin <beangr@163.com>
# Created Date:		2014-06-24
# Release Version:	1.19.805
# Last Modified:	2019-08-05
# this script is available for ubuntu to configure embedded environment

#list the software need to be installed to the variable FILELIST
TOOLS_COMM="figlet ghex gimp nautilus-open-terminal shutter tree alien "
TOOLS_EDITOR="vim vim-doc vim-scripts ctags cscope gawk indent gedit gedit-plugins "
TOOLS_PACKET="rar unrar zip unzip p7zip p7zip-full p7zip-plugins "
TOOLS_NETWORK="axel curl ssh openssl openssl-devel libssl-dev uget tftp-hpa tftpd-hpa nfs-kernel-server filezilla "
TOOLS_TERM="ckermit minicom putty "
TOOLS_PYTHON="build-dep python python-pip python-setuptools tkintertk-devel tk tcl tk-dev tcl-dev python-tk python3-tk python-dev python-numpy python-scipy opencv-python matplotlib python-wand "
TOOLS_EMBED="uml-utilities squashfs-tools libelf-dev libelf-devel elfutils-libelf-devel qemu libmagickwand-dev liblz4-tool "
TOOLS_CODING="meld dos2unix unix2dos tofrodos subversion git-core gitk "
TOOLS_BUILD="build-essential libtool cmake automake flex bison gperf graphviz gnupg gettext mingw32 readline readline-devel libc6-dev libc++-dev lib32stdc++6 lib32bz2-1.0 lib32bz2-dev gcc gcc-c++ g++ g++-multilib zlib zlib-devel tshark libncurses5-dev libncursesw5-dev libjsoncpp-dev ccache "
TOOLS_AUDIO="audacity audacious "
TOOLS_MEDIA="ubuntu-restricted-addons ubuntu-restricted-extras mpv smplayer"
TOOLS_SNAP="snapd snapcraft "
TOOLS_MONO="mono-complete mono-addins-utils mono-devel gtk-sharp2 gnome-sharp2 "

TOOLS_CENTOS_EXTRA="ntlmaps net-tools wireshark nfs4-acl-tools nfs-utils nfs-utils-lib ncurses-devel ncurses "
TOOLS_UBUNTU_EXTRA="ntlmaps net-tools wireshark emacs usb-creator-gtk libjsoncpp-dev "

# albert
# sudo add-apt-repository ppa:noobslab/macbuntu
# audo apt install albert
BASIC_TOOLS="${TOOLS_COMM} ${TOOLS_EDITOR} ${TOOLS_PACKET} ${TOOLS_NETWORK} ${TOOLS_TERM}"
CODE_TOOLS="${TOOLS_PYTHON} ${TOOLS_EMBED} ${TOOLS_CODING} ${TOOLS_BUILD}"

# for android env
BUILD_ANDROID_U12="git gnupg flex bison gperf python-markdown build-essential zip curl ia32-libs libc6-dev libncurses5-dev:i386 xsltproc x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos libxml2-utils zlib1g-dev:i386 "
#libgl1-mesa-dri:i386 libgl1-mesa-glx:i386
BUILD_ANDROID_U14="git gnupg flex bison gperf python-markdown build-essential zip curl ia32-libs libc6-dev lib32ncurses5-dev lib32z1 x11proto-core-dev libx11-dev libreadline-gplv2-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos libxml2-utils xsltproc libxml-simple-perl zlib1g-dev "
BUILD_ANDROID_U16="lib32ncurse5s5 lib32z1 "
BUILD_ANDROID_U18=" "
BUILD_ANDROID_U20=" "

DOCKER_DEP="apt-transport-https ca-certificates curl software-properties-common gnupg-agent "
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# sudo bash -c "echo deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable > /etc/apt/sources.list.d/docker.list"

## apt-cache search opencv
# OPEN_CV="$(apt-cache search opencv | awk '{print $1}')"
# OPEN_CV="libgtk2.0-dev pkg-config"
## g++ `pkg-config opencv --cflags --libs` my_example.cpp -o my_example

## bison and flex is the analyzer of programmer and spell
## textinfo is a tool to read manual like man
## automake is used to help create Makefile
## libtool helps to deal with the dependency of libraries
## cvs, cvsd and subversion are used to control version


## ubuntu 12.04 software installing list
U1204_FILELIST="${BASIC_TOOLS} ${CODE_TOOLS} ${EMBED_TOOLS} ${BUILD_ANDROID_U12}"
## ubuntu 14.04 software installing list
U1404_FILELIST="${BASIC_TOOLS} ${CODE_TOOLS} ${EMBED_TOOLS} ${BUILD_ANDROID_U14}"
## ubuntu 16.04 software installing list
U1604_FILELIST="${BASIC_TOOLS} ${CODE_TOOLS} ${EMBED_TOOLS} ${BUILD_ANDROID_U16}"
## ubuntu 18.04 software installing list
U1804_FILELIST="${BASIC_TOOLS} ${CODE_TOOLS} ${EMBED_TOOLS} ${BUILD_ANDROID_U16}"
## ubuntu 20.04 software installing list
U2004_FILELIST="${BASIC_TOOLS} ${CODE_TOOLS} ${EMBED_TOOLS} ${BUILD_ANDROID_U20}"

INSTALL_CHECK_FLAG="-y"

## check_user_UID
function check_user_UID() {
#	if [[ ${UID} -lt 1000 ]] ;then
#		echo "ERROR: Please don't use root to execute this script."
#		exit 1
#	fi
	sudo ls > /dev/null
	if [ "$?" = "1" ] ;then
		echo -e "\tThere is a configuration/permission problem."
		echo -e "\tPlease ensure that you have permission to use sudo"
		exit 1
	fi
	if [ "${UID}" = "0" ] ;then
		SUDO=''
	else
		SUDO=sudo
	fi
}

## check whether system is Ubuntu or not
function check_system_distributor() {
## get system distributor ID: Ubuntu ?
LINUX_DISTRIBUTOR=$(cat /etc/issue |tr 'A-Z' 'a-z'|awk ' /release/ {print $1}' | sed -n "1p")
LINUX_DISTRIBUTOR=${LINUX_DISTRIBUTOR:=$(lsb_release -i | tr 'A-Z' 'a-z' | awk '/distributor/ {print $3}')}
LINUX_DISTRIBUTOR=${LINUX_DISTRIBUTOR:=$(cat /etc/*release |tr 'A-Z' 'a-z'|awk '/\<release\>/ {print $1}'|sed -n '1p')}
LINUX_DISTRIBUTOR=${LINUX_DISTRIBUTOR:=$(cat /etc/*release |tr 'A-Z' 'a-z'|awk '/distrib_id=/ {print $1}'|sed 's/distrib_id=//'|sed -n '1p')}
	# 'get system distributor ID: Ubuntu''

	echo "checking system distributor and release ID ..."
	if [[ "${LINUX_DISTRIBUTOR}" == "ubuntu" ]] ;then
		echo -e "\tCurrent OS Distributor: ${LINUX_DISTRIBUTOR}"
	else
		echo -e "\tCurrent OS is not ubuntu"
		echo -e "\tCurrent OS Distributor: ${LINUX_DISTRIBUTOR}"
		exit 1
	fi
}

## check whether system is Ubuntu 12.04 or 14.04
function check_system_release_version() {
## get system release version: 12.04/14.04 ?
LINUX_RELEASE_VERSION=$(cat /etc/issue | awk '/release/ {print $3}'| sed -n '1p')
LINUX_RELEASE_VERSION=${LINUX_RELEASE_VERSION:=$(lsb_release -r | tr 'A-Z' 'a-z' | awk '/release/ {print $2}')}
LINUX_RELEASE_VERSION=${LINUX_RELEASE_VERSION:=$(cat /etc/*release |tr 'A-Z' 'a-z'|awk '/\<release\>/ {print $3}'|sed -n '1p')}
LINUX_RELEASE_VERSION=${LINUX_RELEASE_VERSION:=$(cat /etc/*release |tr 'A-Z' 'a-z'|awk '/distrib_release=/ {print $1}'|sed 's/distrib_release=//'|sed -n '1p')}

	# 'get system release version: 12.04/14.04 ?''
	echo -e "\tCurrent OS Version: ${LINUX_RELEASE_VERSION}"
	case ${LINUX_RELEASE_VERSION:0:5} in
		12.04)
			FILELIST=${U1204_FILELIST}
			;;
		14.04)
			FILELIST=${U1404_FILELIST}
			;;
		16.04)
			FILELIST=${U1604_FILELIST}
			;;
		18.04)
			FILELIST=${U1804_FILELIST}
			;;
		*.04)
			FILELIST=${U2004_FILELIST}
			;;
		*)
			echo "Only support Ubuntu LTS version, eg: XX.04 ..."
			exit 1
			;;
	esac
	# sleep 2
}

## check linux system environment
function check_linux_system_env() {
	check_system_distributor
	check_system_release_version
	check_user_UID
	echo "checked OK, preparing to setup softwares ..."
}

## update and upgrade system
function update_upgrade_ubuntu() {
	read -p "    update software source.list <y/N>? " select
	if [ "${select}" = "y" ] ;then
		echo "sudo apt-get update"
		#update the source.list
		${SUDO} apt-get update
	fi

	read -p "    upgrade system <y/N>? " select
	if [ "${select}" = "y" ] ;then
		echo "sudo apt-get upgrade"
		#upgrade the software have installed on the system
		${SUDO} apt-get upgrade
	fi
}

## function initial vim
function vim_initialize_viminfo() {
	if [ "${UID}" -ge 1000 ] ;then
		local VIMINFO_HOME=${HOME}
		echo "initializing viminfo file ..."
		${SUDO} rm -f ${VIMINFO_HOME}/.viminfo
		# touch ${VIMINFO_HOME}/.viminfo
	fi
}

#install one software every cycle
function install_soft_for_each() {
	trap 'echo -e "\nAborted by user, exit";exit' INT
	echo "Will install below software for your system:"
	local soft_num=0
	local cur_num=0
	for file in ${FILELIST}
	do
		let soft_num+=1
		echo -e "${file} \c "
	done
	echo ""
	TMOUT=10
	read -p "    Install above softwares <Y/n>? " select
	if [ "${select,,}" = "n" ] ;then
		return
	fi

	# FILELIST=$(echo ${FILELIST} | sed 's/[\t ]/\n/g'| sort -u)
	for file in ${FILELIST}
	do
		let cur_num+=1
		let cur_percent=cur_num*100/soft_num
		# echo "${cur_percent}%"

		echo "============================================"
		echo " [${cur_percent}%] installing ${file} ..."
		echo "--------------------------------------------"
		${SUDO} apt-get install ${file} ${INSTALL_CHECK_FLAG}
		echo "$file installed ."
		echo ""
		# sleep 1
	done
	vim_initialize_viminfo
}

function create_link_mesa_libGL_so() {
	LIB_GL_SO=/usr/lib/i386-linux-gnu/libGL.so
	LIB_GL_SO_1=/usr/lib/i386-linux-gnu/mesa/libGL.so.1
	if ! [ -f "${LIB_GL_SO_1}" ] ;then
		return
	fi
	${SUDO} ln -s -f ${LIB_GL_SO_1} ${LIB_GL_SO}
}

## install ibus input method frame
function install_ibus_pinyin_for_ubuntu(){
	read -p "press <Enter> to install and setup ibus-pinyin "
	${SUDO} apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 -y
	## install ibus pinyin
	${SUDO} apt-get install ibus-pinyin -y

	sleep 3
	read -p "Press <Enter> to select ibus-pinyin as the defalut input method "
	im-config

	## restart ibus-pinyin
	##try below command to repair ibus-pinyin:
	#ibus-daemon -drx
	ibus-daemon -drx
	if [ -f ~/.bashrc ] ;then
		local IS_EXIST=$(cat ~/.bashrc | sed -n '/ibus-daemon/p')
		if [ "${IS_EXIST}" = "" ] ;then
			cp ~/.bashrc ~/.bashrc_$(date +%Y%m%d_%H%M%S)
			echo "ibus-daemon -drx" >> ~/.bashrc
		fi
	fi

	## ibus-setup
	## add ibus-pinyin input method to the input method list
	read -p "Press <Enter> to select and add ibus-pinyin "
	ibus-setup

	## configure ibus pinyin
	if [ "${LINUX_RELEASE_VERSION}" = "12.04" ] ;then
		/usr/lib/ibus-pinyin/ibus-setup-pinyin
	else
		/usr/lib/ibus/ibus-setup-pinyin
	fi

	echo "====================================================="
	echo -e "\tSetup ibus input method OK, please re-login your system and execute below commands to configure it. "
	echo -e "\t\t/usr/lib/ibus-pinyin/ibus-setup-pinyin #for ubuntu1204"
	echo -e "\t\t/usr/lib/ibus/ibus-setup-pinyin #for ubuntu1404 or later version"
	echo "====================================================="
}

function remove_ibus_pinyin_from_ubuntu() {
	## remove ibus-pinyin will lead some problems, repair our OS by below command:
	## ${SUDO} apt-get install ibus-pinyin unity-control-center \
	## unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts
	
	## remove ibus-pinyin
	read -p "Press <Enter> to remove ibus "
	${SUDO} apt-get purge ibus
	${SUDO} apt-get autoremove
	## repair OS when removed ibus pinyin 
	${SUDO} apt-get install unity-control-center unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts
}

function install_fcitx_pinyin_for_ubuntu() {
	remove_ibus_pinyin_from_ubuntu

	## install fcitx pinyin
	echo "installing fcitx ..."
	${SUDO} apt-get install fcitx fcitx-pinyin

	read -p "Press <Enter> to select your input method [fcitx] "
	im-config
	read -p "Press <Enter> to add your input method [pinyin] "
	fcitx-config-gtk3

	echo "====================================================="
	echo -e "\tSetup fcitx input method OK, please re-login your system and execute below commands to configure it. "
	echo -e "\t\tim-config"
	echo -e "\t\tfcitx-config-gtk3"
	echo "====================================================="
}

function countdown_select_for_each() {
	#################################
	local DEFAULT_OPTION=
	local TIME_SELECT_TIMEOUT=9
	local PROMTE_MESSAGE_HEADER="$1"
	local PROMTE_MESSAGE_TAIL=" in ${TIME_SELECT_TIMEOUT}s: "
	#################################
	#################################
	local OPTIONS=$(echo 'This_is_your_OPTIONS')
	#################################
	local PROMTE_MESSAGES=${PROMTE_MESSAGE_HEADER:="Please select"}${PROMTE_MESSAGE_TAIL}
	echo "Will use a default value if you choosed none in ${TIME_SELECT_TIMEOUT}s. "

	for ((countdown=${TIME_SELECT_TIMEOUT}-1; countdown>=1; countdown--)) 
	do
		trap 'exit 0' HUP
		sleep 1; echo -e "\r${PROMTE_MESSAGE_HEADER} in ${countdown}s: \c "
	done &
	local BG_PID=$!

	local TMOUT=${TIME_SELECT_TIMEOUT}
	local option=${DEFAULT_OPTION}
	PS3="${PROMTE_MESSAGES}"

	trap 'kill ${BG_PID}; echo; exit' INT
	select option in "ibus-pinyin" "fcitx-pinyin" "Use default input method"
	do
		if [ "${option}" != "" ] ;then
			break
		else
			echo "Invalid option, try again."
		fi
	done
	(kill -HUP ${BG_PID} &>/dev/null)
	echo

	if [ "${option}" != "" ] ;then
		echo "You select: ${option}"
	else
		echo "You select none."
	fi
	trap 'exit' INT
}

function install_ibus_or_fcitx_pinyin() {
	REPLY=
	countdown_select_for_each  "Please select your input method"
	case ${REPLY} in
	1)
		echo "Preparing install_ibus_pinyin_for_ubuntu ..."
		install_ibus_pinyin_for_ubuntu
		;;
	2)
		echo "Preparing install_fcitx_pinyin_for_ubuntu ..."
		install_fcitx_pinyin_for_ubuntu
		;;
	*)
		echo "Use default input method. "
		;;
	esac
}

function install_ubuntu_multimedia_supports() {
	TMOUT=
	read -p "    Install multimedia libs <y/N>? " select
	if [ "${select}" = "y" ] ;then
		echo "This will take you a long time to download."
		${SUDO} apt-get install ubuntu-restricted-addons
		${SUDO} apt-get install ubuntu-restricted-extras
	else
		return
	fi
}

read -p "Setup build environment for Ubuntu, press <Enter> to continue "


check_linux_system_env
update_upgrade_ubuntu
install_soft_for_each
create_link_mesa_libGL_so
# install_ibus_or_fcitx_pinyin
install_ubuntu_multimedia_supports

echo "Finished !"

 

 

 

 

 

 

2.根据编译安卓的需要安装对应版本的java环境

Adnroid L要求用openjdk,

Android L之前的版本要求使用sunjdk

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu搭建android编译环境 的相关文章

  • Android Studio JNI开发入门教程

    概述 在Andorid Studio不支持JNI开发之前大家一般都是使用Eclipse开发JNI 各种配置让人觉得很蛋疼 从Andorid Studio支持JNI开发后 让我们开发JNI变的如此简单 下面我就介绍一下Android Stud
  • Android-Java和HTML5交互-混合开发-优化

    现在很多的 APP中会嵌套HTML5的页面 比如经常变化的等等 有一部分页面需要原生Java与HTML5中的js进行交互操作 下面介绍一下android中HTML5的使用 1 关于HTML5种cookie 网页中可能会用到 用户信息等很多参
  • Android BLE 快速开发示例

    目录 概述 1 FastBle的使用 2 BLE开发实践方面的理解 3 FastBle源码解析 概述 思来想去 还是写这篇博文 记录一下 当时学习BLE的一些心得 重捡回当前Android知识 想深入了解蓝牙通讯知识 这个案例是非常不错的选
  • android 注册页面实现

    自己动手做的第一个demo 简单的注册页面的实现 并且注册成功后返回注册信息 适用于android新手基本控件的使用 注册页面的实现 import android os Bundle import android app Activity
  • 从Map中 取出第一个key/第一个value的方法

    从Map中取出第一个 key 和 value 的方法 使用Map Entry进行操作 可与LinckedHashMap 按元素存入顺序排序的有序Hash表 搭配使用 实现特定的业务要求 获取map中第一个key值 param map 数据源
  • Android网络编程的Socket通信简述

    概述 本文主要介绍Android中的网络编程的Socket通信一下小小总结 创建服务器端的步骤 1 指定端口实例化一个ServerSocket 2 调用ServerSocket的accept方法等待连接期间阻塞 3 获取位于底层的Socke
  • SVN文件夹图标不正常显示解决方案(win10)android studio

    在使用Android Studio提交代码时发现svn图标莫名其妙的不显示 其他操作都正常 在网上搜了一堆资料都有各种说法 结合了操作 一步步来试终于给我找到了 在这我自己总结一下 一部分也是拷贝别的图片 写一篇清楚文章好希望能帮助和我遇到
  • Android studio安装教程(2020/11/20最新版本的安装)

    一 安装前提 系统已经安装了jdk 而且版本在1 8以上 打开命令提示符界面 输入java version 切记之间有空格 就可以查看自己jdk安装版本了 二 安装准备 在官网下载最新安装包 接收协议进行下载 三 安装步骤 双击安装包 点击
  • Android adb 输出指定app 错误日志

    查看错误日志 adb logcat E 按照时间查看日志 adb logcat v time
  • 2019最新 国内唯一的Android从程序员到架构师全套教程

    课程目标 国内唯一的Android从程序员到架构师全套视频教程 适用人群 Android开发至少两年经验的IT工程师 想深入了解Android开源平台的资深工程师 Android项目团队技术管理者 课程概述 遵循敏捷的迭代过程 从思想 方法
  • Android Studio 如何设置logcat(控制台)的缓存大小,增加logcat控制台条数

    在一些比较大型的项目Logcat条数会很多 由于LogCat控制台经常刷新 速度太快导致之前的日志被冲洗掉 这里教大家一个方法 可以避免这种情况发生 改下logcat的缓存 缓冲区 大小 做到显示更多的LogCat日志 1 去找你所安装的A
  • ubuntu搭建android编译环境

    本文来自linux与嵌入式技术Q群52240781 ubuntu12 04 14 04安装后搭建android编译环境 注安装的是64位ubuntu系统12 04或14 04 请安装ubuntu的LTS版即12 04或14 04 每2年发布
  • Android SIM卡识别加载流程

    文章目录 总述 代码路径 UICC框架 SIM卡识别加载流程 日志分析举例 总述 本文基于Android N Android 7 首先要知道SIM卡一般是挂载在CP侧 MODEM侧 的 由MODEM给予真正的上电 识别 通信等 然后通过AP
  • Volley 源码解析

    1 功能介绍 1 1 Volley Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架 在 Google I O 2013 大会上发布 名字由来 a burst or emission of many t
  • Unity Android 长时间运行导致卡死的BUG

    抛出问题 最近项目中遇到一个问题 Unity 项目打包成 Android 长时间运行会导致 App 卡死 该问题出现在Unity 2021 3 19其他版本不详 由于项目中引入了arr库所以查找问题比较难受 好在搞安卓的同事帮忙研究了一下
  • Android NDK是什么

    官方给出的答案 Android NDK 是一套允许您使用原生代码语言 例如 C 和 C 实现部分应用的工具集 在开发某些类型应用时 这有助于您重复使用以这些语言编写的代码库 深入的学习 https developer android goo
  • Android 报错 : FATAL EXCEPTION:main 解决方法

    今天安卓开发课上碰到的新问题 前景提示 老师让我们自己试一下那个两个页面跳转的效果 于是我就开始写了 然后报错 解决方法 逐一排查 首先要看你mainfest xml里面有没有增加Activity 当然我是加了 但是他还报错 具体代码界面
  • Android Studio工具使用技巧

    作为一个Android开发者 熟练使用开发工具能让你工作效率提高 能让你少点加班 剩下时间学习其他的知识 是个多么好的事情 想高级攻城狮方向迈进 不费话了 直接进去主题 一 模版 1 1 for循环的使用 遍历集合的时候 对象 for就可以
  • 【Android Studio】Design editor is unavailable until next gradle sync.如何解决?

    Design editor is unavailable until next gradle sync 如何解决 打开一个网上开源的下载文件 在查看安卓页面布局 也就是控件布局时 会出现一个bug Design editor is unav
  • 升级SQLite数据库

    一 步骤 1 在之前的基础上添加一张Category表 在onCreate 方法中执行建CREATE CATEGORY表语句 2 然后在onUpgrade 中执行两条drop语句 发现数据库表存在 就将已经存在的表格删除 再在onCreat

随机推荐

  • Android Studio出现ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037问题

    打开android studio自带模拟机出现问题 原因是adb exe因为被阻止不能启动 具体错误代码如下 Emulator emulator ERROR AdbHostServer cpp 102 Unable to connect t
  • 性能不输 x265!国产开源 AVS2 高清实时编码器 xAVS2

    2018 年 1 月 31 日 北京大学数字视频编解码技术国家工程实验室视频编码算法研究室 PKU VCL 开源了 AVS2 高清实时编码器 xAVS2 V1 0 AVS2 是我国新一代视频编码国家标准 和第一代 AVS 视频编码标准相比
  • jenkins添加网页链接方法

    代码 li 外网页测试链接 a href http www baidu com 百度 a li li 本地网页测试链接 a href http 192 168 0 236 8080 seed package index html 我的本地h
  • 高德地图实现点聚合功能的详细步骤加截取地图图片 (附源码)

    目录 介绍 准备工作 1 注册并登录高德地图开放平台 申请密钥 2 在Vue项目中安装高德地图的相关库 插件 一 点聚合 1 引入高德地图API font color purple initializeMap font color purp
  • Codeforces ZeptoLab Code Rush 2015

    Codeforces ZeptoLab Code Rush 2015 比赛链接 http codeforces com contest 526 A King of Thieves time limit per test 1 second m
  • python不能创建字典的是_python字典key不能是可以是啥类型

    python中字典的key不能是可变类型 字典可存储任意类型对象 其中值可以取任何数据类型 但键必须是不可变的 如字符串 数字或元组 语法格式 d key1 value1 key2 value2 字典是另一种可变容器模型 且可存储任意类型对
  • c++的类与对象(下)

    1 初始化列表 在创建对象时 编译器通过调用构造函数 给对象中各个成员变量一个合适的初始值 构造函数体中的语句只能将其称作为赋初值 而不能称作初始化 因为初始化只能初始化一次 初始化的本质就是只能初始化一次 而构造函数体内可以多次赋值 以一
  • 漫话算法[二分查找]:不用背你也能写出漂亮的二分查找框架并秒杀至少5道题!

    快来和叮当学习算法吧 B站同步更新 同步到开源项目Github传送门 Easy Programming及微信公众号 CVBear 项目内含Leetcode五杀刷题指南 致力于通过5个问题带你入门掌握算法套路 漫话算法 二分查找 算法模板 一
  • VT系列二:检测是否支持虚拟化

    本文只是学习此视频后的一些总结 不当之处还请指出 视频作者 小宝来了 视频连接 http bbs pediy com showthread php t 211973 约定 本文中出现的名词 虚拟机 客户机 GUEST 都是被监控的操作系统或
  • Python第一课:print()函数、变量与赋值

    Python第一课 print 函数 变量与赋值 所有的符号输入 必须是英文状态 一 print 函数的用法 单刀赴会 不带引号 数据 黄袍加身 单引号 双引号 三引号 单引号与双引号效果一致 当括号内有的语句有单引号或双引号时 三引号可以
  • 初级1 题目一 时间复杂度及示例

    1 什么是时间复杂度 常数时间的操作 一个操作如果和数据量没有关系 每次都是固定时间内完成的操作 叫做常数操作 一个算法流程中 常数操作数量的指标 就是常数操作在算法里总共有多少次 称为时间复杂度 常用O 读作big O 来表示 具体来说
  • 如何选择一款趁手的光纤测试仪

    光纤测试仪是一种用于物理学 电子与通信技术领域的物理性能测试仪器 于1996年11月1日启用 常用光纤测试表有 光功率计 光万用表 稳定光源 光时域反射仪 OTDR 和光故障定位仪 如何选择合适的光纤测试仪 选择光纤测试仪表 一般需考虑以下
  • 虚拟化原理以及应用(8)课堂笔记-第三章KVM的概述第四章-课堂笔记-virt-manager默认方式创建虚拟机(1)

    一 KVM的概念 重点 KVM关键词 1 基于Linux内核的全虚拟化解决方案 运行在支持硬件虚拟化功能的X86平台 Intel VT 或AMD V 基于LINUX内核的全虚拟化的解决方案 运行在支持硬件虚拟化功能的x86平台 intel
  • RNN(循环神经网络)

    文章目录 RNN概述 RNN模型 RNN前向传播算法 RNN反向传播算法推导 RNN小结 DNN的特例CNN的模型和前向反向传播算法 这些算法都是前向反馈的 模型的输出和模型本身没有关联关系 今天我们就讨论另一类输出和模型间有反馈的神经网络
  • Vue.config.productionTip = false 是什麽意思

    阻止启动生产消息 常用作指令 阻止启动生产消息 這又是什麽意思 看下效果 Vue config productionTip false Vue config productionTip true 感覺多了一行信息
  • python3(二)Numpy

    这两个库都是基于C语言的 所以这两个库的计算速度相比python的list或dict来说很快 pandas又是基于numpy的库 相当于numpy的升级版本 并且用到了矩阵的计算 计算速度相比利用单个数据或字典 列表来说 快很多 1 基本
  • CAD+开发小结+交互+选择集+深度拷贝AcDbObjectId中指向的实体集+读取其他DWG文件

    深度拷贝将数组中的实体ID指向的实体拷贝至blockId为ID的块中 AcDbIdMapping adimIdMap AcApDocument pDoc acDocManager gt curDocument acDocManager gt
  • 【Kubernetes部署篇】Kubeadm方式搭建K8s集群 1.27.0版本

    文章目录 一 集群规划及架构 二 系统初始化准备 所有节点同步操作 三 安装并配置cri dockerd插件 四 安装kubeadm 所有节点同步操作 五 初始化集群 六 Node节点添加到集群 七 安装网络组件Calico 八 测试Cor
  • sqli labs less 25

    按照常规输入id 1 提示报错信息如下 一个很常见的报错 可以看出是单引号闭合的语句 输入 id 1 or 1 报出的错误信息不明显 加入一个括号进行试探能不能报出更多的语句错误 输入 id 1 or 1 从上图看出来or 被屏蔽了 经过更
  • ubuntu搭建android编译环境

    本文来自linux与嵌入式技术Q群52240781 ubuntu12 04 14 04安装后搭建android编译环境 注安装的是64位ubuntu系统12 04或14 04 请安装ubuntu的LTS版即12 04或14 04 每2年发布