AOSP linux环境配置及其编译方法_android inputflinger编译-程序员宅基地

技术标签: Ubuntu  ubuntu  linux  android  Android Framework从入门到入土  

安装依赖libs

sudo apt-get install openjdk-11-jdk;#安装jdk

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache;
sudo apt-get install libssl-dev libncurses5;

下载 repo 工具

sudo apt install curl

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

换源

1.修改还源文件权限

sudo chmod 777 /etc/apt/sources.list

2.备份文件

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

3.修改
清华源
地址:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse

# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

中国科学技术大学源
地址:https://lug.ustc.edu.cn/wiki/mirrors/help/ubuntu/

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial main main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
 
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

阿里源
地址:https://developer.aliyun.com/mirror/ubuntu

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

4.更新

sudo apt-get update
sudo apt-get upgrade

初始化与同步

方法一:

curl -OC - https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

方法二:

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/mirror/manifest#默认最新

#选择特定版本 版本列表https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r1
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r6
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r43

repo sync	#同步(全仓下载)

#单仓下载方式
repo sync -c platform/frameworks/base
repo sync -c platform/frameworks/native
repo sync -c system/core

https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds查看版本列表,如果网站打不开可以下载附件:android版本列表以及其适用机型

常见报错

  • 如果提示无法连接到 gerrit.googlesource.com
    在这里插入图片描述

    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
    chmod +x repo
    export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
    
  • 如果提示身份未知
    按照提示设置email和name即可
    在这里插入图片描述

  • repo脚本问题
    在初始化代码操作或者使用repo --version命令检查repo时,可能会有以下报错:

      File "/home/xxx/bin/repo", line 51
        def print(self, *args, **kwargs):
                ^
    SyntaxError: invalid syntax
    

    在这里插入图片描述
    改为使用以下引导脚本:

    curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
    

编译

. build/envsetup.sh
lunch sdk_phone_x86_64 #must this
make -j16#全仓编译

编译完成后,输入命令emulator运行模拟器
注:第一次编译一定要全仓编译

第一次编译之后如果不想再编译直接运行模拟器,可以用以下命令

. build/envsetup.sh
lunch sdk_phone_x86_64 #must this

#以可写的形式打开模拟器,否则模拟器文件是只读状态
emulator -writable-system

如果是在android studio中打开模拟器,则需要一个模拟器名字
在你的SDK目录下找到模拟器目录emulator,运行一下命令

#查看模拟器名字
./emulator -list-avds
#以可写的形式打开模拟器,否则模拟器文件是只读状态
./emulator '@模拟器名字' -writable-system

常见的单模块编译
使用mmmmm命令或者make命令编译模块代码

  • mmmmm命令编译模块代码
    mm(make module)命令用于编译当前目录下的模块。当你使用mm时,它会找到当前目录对应的Android.mk文件,并且只编译这个目录下定义的模块。
    例如:进入到frameworks\base\services\目录,直接运行mm命令编译模块

    mmm(make module matches)命令与mm类似,也是用于编译特定的模块,但它允许你指定一个路径。这意味着你可以从任何地方执行mmm命令,并提供要编译模块的路径作为参数。
    例如,你可以在源码的根目录下运行mmm frameworks\base\services\来编译位于frameworks\base\services\目录下的模块。

  • make命令编译模块代码
    在源码根目录下运行命令

    模块:make Launcher3
    代码路径: packages/apps/Launcher3
    生成包目录:out/target/product/emulator_x86_64/system_ext/priv-app/Launcher3
    adb install -t -d Launcher3.apk

    模块:make Launcher3QuickStep
    代码路径: packages/apps/Launcher3
    生成包目录:out/target/product/emulator_x86_64/system_ext/priv-app/Launcher3QuickStep
    adb install -t -d Launcher3QuickStep.apk

    模块:make SystemUI
    代码路径:frameworks\base\packages\SystemUI
    生成包目录:out/target/product/emulator_x86_64/system_ext/priv-app/SystemUI
    adb push SystemUI.apk /system_ext/priv-app/SystemUI
    注:有的公司SystemUI在 packages/apps/目录下集成,生成apk的位置也会不同,需要看对应目录下是否有Android.bp或者mk之类的文件。比如原生代码在frameworks\base\packages\SystemUI目录有Android.bp文件,说明SystemUI就是在这个目录下集成。

    模块:make services
    代码路径:frameworks\base\services
    生成包目录:out/target/product/emulator_x86_64/system/framework/services.jar
    adb push services.jar /system/framework/

    模块:make framework (android 11之前的代码使用)
    模块:make framework-minus-apex(android 11及其之后的代码使用)
    代码路径:frameworks\base\
    生成包目录:out/target/product/emulator_x86_64/system/framework/framework.jar
    adb push framework.jar /system/framework/

    模块:make framework-res
    代码路径:frameworks\base\core\res
    生成包目录:out/target/product/emulator_x86_64/system/framework/framework-res.apk
    adb push framework-res.jar /system/framework/
    :建议先make framework在编译该模块,因为framework-res依赖framework

    模块:make inputflinger
    代码路径:frameworks/native/services/inputflinger
    生成包目录:
    out/target/product/emulator_x86_64/system/lib/libinputflinger.so
    out/target/product/emulator_x86_64/system/lib64/libinputflinger.so
    adb push libinputflinger.so system/lib
    adb push libinputflinger.so system/lib64

:单仓编译后记得push到对应得文件目录中,重启生效

image镜像文件编译

生成手机镜像
命令格式:make 需要生成的镜像模块image
快速生成手机镜像
命令格式:make 需要生成的镜像模块image-nodeps

生成系统镜像
make systemimage
快速生成系统镜像
make systemimage-nodeps
生成镜像目录:out/target/product/emulator_x86_64

从Makefile中可以看出出了会生成基本system.image镜像文件而且还会生成system-qeme.image镜像文件,system-qeme.image是适用于模拟器的镜像文件
在这里插入图片描述
关于其他镜像的的生成Makefile中也有写,文件路径在
AOSP源码根目录/build/core/MakefileAOSP源码根目录/build/core/main.mk

make systemimage本质是拷贝已经生成的文件打包成system.img文件。如果代码有修改,则需先编译修改代码的模块,再去生成镜像文件

其他编译命令

init 
make init 
mmm system/core/init

zygote 
make app_process 
mmm frameworks/base/cmds/app_process

system_server 
make services 
mmm frameworks/base/services

java framework 
make framework 
mmm frameworks/base

framework资源
make framework-res 
mmm frameworks/base/core/res

jni framework 
make libandroid_runtime
mmm frameworks/base/core/jni
 
binder
make libbinder
mmm frameworks/native/libs/binder

编译报错
提示:ninja failed with: exit status 137
查看文件gedit build/soong/java/config/config.go
在这里插入图片描述
javacheap的值太小会被系统直接killed掉
export MAVEN_OPTS="-Xms8192m -Xmx8192m"
一般配置自身电脑内存值的一半

修改后,记得清空out目录再编译,且是必须清空 :rm -rf out

编译后要查看配置是否有生效,可以查看此文件:out/soong/build.ninja ,在此文件内搜索JavacHeapSize,看此值是否为你设置的值

常见问题

  • 提示:ninja: no work to do.
    当编译结束后,却提示ninja: no work to do. ,且编译out目录没有编译产物,则可以执行make clean后再重新编译

  • 编译时,命令提示框突然闪退
    可能是由于电脑内存不足导致,可以尝试清理系统内存的缓存在编译试试

    sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
    
  • 模拟器运行报错

    ERROR   | Running multiple emulators with the same AVD 
    ERROR   | is an experimental feature.
    ERROR   | Please use -read-only flag to enable this feature
    

    在这里插入图片描述在源码目录下android-13.0.0_r43/out/target/product/emulator_x86_64找到cache.img和cache.img.qcow2,删除即可。
    在这里插入图片描述或者直接杀死对应进程
    在这里插入图片描述

导入源码至android studio

  1. 进入源码根目录,初始化系统环境
    source build/envsetup.sh

  2. 源码根目录执行如下命令 ,生成idegen.jar
    mmm development/tools/idegen/

  3. 源码根目录下执行
    sudo development/tools/idegen/idegen.sh

  4. 修改权限
    sudo chmod 777 android.iml
    sudo chmod 777 android.ipr

  5. 过滤模块
    使用文本编辑器打开android.iml文件,搜索关键字"excludeFolder ",把不需要加载的模块添加到此处
    我这里保留了fraweworks、vender、packages、system、sdk模块,其他过滤掉,参考如下:

    <excludeFolder url="file://$MODULE_DIR$/./external/emma"/>
    <excludeFolder url="file://$MODULE_DIR$/./external/jdiff"/>
    <excludeFolder url="file://$MODULE_DIR$/out/eclipse"/>
    <excludeFolder url="file://$MODULE_DIR$/.repo"/>
    <excludeFolder url="file://$MODULE_DIR$/external/bluetooth"/>
    <excludeFolder url="file://$MODULE_DIR$/external/chromium"/>
    <excludeFolder url="file://$MODULE_DIR$/external/icu4c"/>
    <excludeFolder url="file://$MODULE_DIR$/external/webkit"/>
    <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
    <excludeFolder url="file://$MODULE_DIR$/out/host"/>
    <excludeFolder url="file://$MODULE_DIR$/out/target/common/docs"/>
    <excludeFolder url="file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates"/>
    <excludeFolder url="file://$MODULE_DIR$/out/target/product"/>
    <excludeFolder url="file://$MODULE_DIR$/prebuilt"/>
    <excludeFolder url="file://$MODULE_DIR$/art" />
    <excludeFolder url="file://$MODULE_DIR$/bionic" />
    <excludeFolder url="file://$MODULE_DIR$/bootable" />
    <excludeFolder url="file://$MODULE_DIR$/build" />
    <excludeFolder url="file://$MODULE_DIR$/compatibility" />
    <excludeFolder url="file://$MODULE_DIR$/dalvik" />
    <excludeFolder url="file://$MODULE_DIR$/cts" />
    <excludeFolder url="file://$MODULE_DIR$/developers" />
    <excludeFolder url="file://$MODULE_DIR$/developers/samples" />
    <excludeFolder url="file://$MODULE_DIR$/development" />
    <excludeFolder url="file://$MODULE_DIR$/devices" />
    <excludeFolder url="file://$MODULE_DIR$/docs" />
    <excludeFolder url="file://$MODULE_DIR$/external" />
    <excludeFolder url="file://$MODULE_DIR$/flashing-files" />
    <excludeFolder url="file://$MODULE_DIR$/hardware" />
    <excludeFolder url="file://$MODULE_DIR$/kernel" />
    <excludeFolder url="file://$MODULE_DIR$/libcore" />
    <excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
    <excludeFolder url="file://$MODULE_DIR$/out" />
    <excludeFolder url="file://$MODULE_DIR$/pdk" />
    <excludeFolder url="file://$MODULE_DIR$/platform_testing" />
    <excludeFolder url="file://$MODULE_DIR$/prebuilt" />
    <excludeFolder url="file://$MODULE_DIR$/prebuilts" />
    <excludeFolder url="file://$MODULE_DIR$/shortcut-fe" />
    <excludeFolder url="file://$MODULE_DIR$/test" />
    <excludeFolder url="file://$MODULE_DIR$/toolchain" />
    <excludeFolder url="file://$MODULE_DIR$/tools" />
    
  6. 导入源码
    Android Studio 打开工程源码下的 android.ipr 文件,此时就开始加载代码
    如果导入有异常,需要删除根目录下的缓存文件android.iws,直接重新加载android.ipr 文件,或者按上面的步骤重新生成android.ipr 文件加载即可。

  7. 调整Modules
    打开源码跳转时可能会出现加载异常的情况
    在这里插入图片描述我们打开File->Project Structure
    List item选中Module source,按住Alt+↑,使其到最顶部

交换空间swap配置(可选)

编译过程中可能会有FAILED: out/soong/build.ninja这类报错,可以配置swap之后编译

1.创建要作为swap分区的文件:增加count大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。
dd if=/dev/zero of=/var/swapfile bs=1024 count=16777216
这里count的值一般和自身电脑内存一致,我这里是1024 x 1024 x 16 = 16G

2.格式化为交换分区文件:
mkswap /var/swapfile
建立swap的文件系统

3.修改权限
chmod -R 0600 /var/swapfile

4.启用交换分区文件:
swapon /var/swapfile
启用swap文件

如果启用swap文件报错时,提示:swapon 失败:设备或资源忙
可以先关闭swap文件swapoff /var/swapfile,之后在用swapon开启

5.使系统开机时自启用,在文件/etc/fstab中添加一行:
vi /etc/fstab
进入文件
/var/swapfile swap swap defaults 0 0
在这里插入图片描述
注:
1.权限不足记得在命令前面加上sudo
2.其中 /var/swapfile为自定义交换分区路径,可以按照自己喜好命名

其他

1.截图
截图工具安装sudo apt install flameshot ,运行flameshot gui 截图

2.解决apt-get安装中的E: Sub-process /usr/bin/dpkg returned an error code (1)问题

cd /var/lib/dpkg/
sudo mv info/ info_bak          # 现将info文件夹更名
sudo mkdir info                 # 再新建一个新的info文件夹
sudo apt-get update             # 更新
sudo apt-get -f install         # 修复
sudo mv info/* info_bak/        # 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_bak文件夹下
sudo rm -rf info                # 把自己新建的info文件夹删掉
sudo mv info_bak info           # 把以前的info文件夹重新改回名

3.关于Android Studio中的模拟器
想要把文件push到模拟器中,但是设备无法remount

  • 检查环境变量是否配置
sudo vi /etc/profile
ANDROID_HOME="/Users/Android/sdk"
export PATH="$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/cmdline-tools/latest:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH"
 
source /etc/profile
echo $ANDROID_HOME
  • 运行模拟器
# 进入到到模拟器的目录
cd /Users/Android/sdk/emulator/
# 查看模拟器名字
./emulator -list-avds
./emulator '@模拟器名字' -writable-system

参考

https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
https://lug.ustc.edu.cn/wiki/mirrors/help/aosp/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yimelancholy/article/details/130462470

智能推荐

基于Kepler.gl 和 Google Earth Engine 卫星数据创建拉伸多边形地图-程序员宅基地

文章浏览阅读965次,点赞18次,收藏21次。现在我们有了 2021 年和 2023 年的 NDVI 数据帧,我们需要从 2021 年的值中减去 2023 年的值以捕获 NDVI 的差异。该数据集包括像素级别的植被值,我们将编写一个自定义函数来根据红色和绿色波段的表面反射率计算 NDVI。在我的上一篇文章中,我演示了如何将单个多边形分割/镶嵌为一组大小均匀的六边形。现在我们有了植被损失数据,让我们使用 Kepler.gl 可视化每个六边形的植被损失。将地图保存为 HTML 文件,在浏览器中打开 HTML 以获得更好的视图。现在我们将调用该函数并使用、

Echarts绘制任意数据的正态分布图_echarts正态分布图-程序员宅基地

文章浏览阅读3.3k次,点赞6次,收藏5次。正态分布,又称高斯分布或钟形曲线,是统计学中最为重要和常用的分布之一。_echarts正态分布图

Android中发送短信等普通方法_android bundle.get("pdus");-程序员宅基地

文章浏览阅读217次。首先要在Mainfest.xml中加入所需要的权限:[html] view plain copyprint?uses-permission android:name="android.permission.SEND_SMS"/> uses-permission android:name="android.permission.READ_SMS"/> _android bundle.get("pdus");

2021-07-26 WSL2 的安装和联网_wsl2 联网-程序员宅基地

文章浏览阅读2.6k次。0、说明最近在学习 Data Assimilation Research Testbed (DART) 相关内容,其软件是在 Unix/Linux 操作系统下编译和运行的 ,由于我的电脑是 Windows 10 的,DART 推荐可以使用 Windows Subsystem For Linux (WSL) 来创建一个 Windows 下的 Linux 子系统。以下的内容主要介绍如何安装 WSL2,以及 WSL2 的联网。1、如何在 Windows 10 下安装WSL具体的安装流程可以在 microso_wsl2 联网

DATABASE_LINK 数据库连接_添加 database link重复的数据库链接命-程序员宅基地

文章浏览阅读1k次。DB_LINK 介绍在本机数据库orcl上创建了一个prod_link的publicdblink(使用远程主机的scott用户连接),则用sqlplus连接到本机数据库,执行select * from scott.emp@prod_link即可以将远程数据库上的scott用户下的emp表中的数据获取到。也可以在本地建一个同义词来指向scott.emp@prod_link,这样取值就方便多了..._添加 database link重复的数据库链接命

云-腾讯云-实时音视频:实时音视频(TRTC)-程序员宅基地

文章浏览阅读3.1k次。ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC)支持跨终端、全平台之间互通,从零开始快速搭建实时音视频通信平台1.返回顶部 1、腾讯实时音视频(Tencent Real-Time Communication,TRTC)拥有QQ十几年来在音视频技术上的积累,致力于帮助企业快速搭建低成本、高品质音视频通讯能力的完整解决方案。..._腾讯实时音视频 分享链接

随便推点

用c语言写个日历表_农历库c语言-程序员宅基地

文章浏览阅读534次,点赞10次,收藏8次。编写一个完整的日历表需要处理许多细节,包括公历和农历之间的转换、节气、闰年等。运行程序后,会输出指定年份的日历表。注意,这个程序只是一个简单的示例,还有很多可以改进和扩展的地方,例如添加节气、节日等。_农历库c语言

FL Studio21.1.1.3750中文破解百度网盘下载地址含Crack补丁_fl studio 21 注册机-程序员宅基地

文章浏览阅读1w次,点赞28次,收藏27次。FL Studio21.1.1.3750中文破解版是最优秀、最繁荣的数字音频工作站 (DAW) 之一,日新月异。它是一款录音机和编辑器,可让您不惜一切代价制作精美的音乐作品并保存精彩的活动画廊。为方便用户,FL Studio 21提供三种不同的版本——Fruity 版、Producer 版和签名版。所有这些版本都是独一无二的,同样具有竞争力。用户可以根据自己的需要选择其中任何一种。FL Studio21.1.1.3750中文版可以说是一站式综合音乐制作单位,可以让您录制、作曲、混音和编辑音乐。_fl studio 21 注册机

冯.诺伊曼体系结构的计算机工作原理是,冯 诺依曼型计算机的工作原理是什么...-程序员宅基地

文章浏览阅读1.3k次。冯诺依曼计算机工作原理冯 诺依曼计算机工作原理的核心是 和 程序控制世界上不同型号的计算机,就其工作原理而言,一般都是认为冯 诺依曼提出了什么原理冯 诺依曼原理中,计算机硬件系统由那五大部分组成的 急急急急急急急急急急急急急急急急急急急急急急冯诺依曼结构计算机工作原理的核心冯诺依曼结构和现代计算机结构模型 转载重学计算机组成原理 一 冯 诺依曼体系结构从冯.诺依曼的存储程序工作原理及计算机的组成来..._简述冯诺依曼计算机结构及工作原理

四国军棋引擎开发(2)简单的事件驱动模型下棋-程序员宅基地

文章浏览阅读559次。这次在随机乱下的基础上加上了一些简单的处理,如进营、炸棋、吃子等功能,在和敌方棋子产生碰撞之后会获取敌方棋子大小的一些信息,目前采用的是事件驱动模型,当下完一步棋界面返回结果后会判断是否触发了相关事件,有事件发生则处理相关事件,没有事件发生则仍然是随机下棋。1.事件驱动模型首先定义一个各种事件的枚举变量,目前的事件有工兵吃子,摸暗棋,进营,明确吃子,炸棋。定义如下:enum MoveE..._军棋引擎

STL与泛型编程-第一周笔记-Geekband-程序员宅基地

文章浏览阅读85次。1, 模板观念与函数模板简单模板: template< typename T > T Function( T a, T b) {… }类模板: template struct Object{……….}; 函数模板 template< class T> inline T Function( T a, T b){……} 不可以使用不同型别的..._geekband 讲义

vb.net正则表达式html,VB.Net常用的正则表达式(实例)-程序员宅基地

文章浏览阅读158次。"^\d+$"  //非负整数(正整数 + 0)"^[0-9]*[1-9][0-9]*$"  //正整数"^((-\d+)|(0+))$"  //非正整数(负整数 + 0)"^-[0-9]*[1-9][0-9]*$"  //负整数"^-?\d+$"    //整数"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0..._vb.net 正则表达式 取html中的herf