zoukankan      html  css  js  c++  java
  • 论文复现

    配置jdk

    • 将下载下来的 jdk-8u241-linux-x64.tar.gz 进行解压
    sudo tar zxvf ./jdk-8u241-linux-x64.tar.gz
    
    • 设置环境变量
    sudo vim /etc/profile
    
    • 在其中添加:
    #set Java environment
    export JAVA_HOME=/home/ubuntu/jdk1.8.0_241
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    
    • 生效环境变量配置,命令行输入:
    source /etc/profile
    
    • 使用命令 java -version 检查Java是否已经安装在Ubuntu上

    安装Android studio以及配置sdk和adb

    • 下载安装包https://www.androiddevtools.cn/
    • 安装软件:解压压缩包,运行studio.sh脚本,完成剩下的安装。这个要在进入root模式之后进行:
    sh /home/ubuntu/android-studio/bin/studio.sh
    
    • 按照提示,一步一步安装。
    • 之后会自动下载sdk文件,我的在/root/Android/Sdk下;
    • 配置环境变量:
    sudo vim /etc/profile
    
    • 在其中添加:
    export ANDROID_HOME=/root/Android/Sdk
    export PATH=${PATH}:${ANDROID_HOME}/tools
    export PATH=${PATH}:${ANDROID_HOME}/platform-tools
    export PATH=${PATH}:${ANDROID_HOME}/build-tools 
    
    • 生效环境变量配置,命令行输入:
    source /etc/profile
    
    • 检查是否配置成功: android -hadb

    • 这里出现了问题
    • 原来,在Android Studio官网的sdkmanager页面中,明确提到了在Android SDK Tools25.2.3及以后提供了sdkmanager command-line tools 以及舍弃android命令.
    • 参考的解决方法
    • 我这里选择下载了android-sdk_r24.4.1-linux.tar,然后解压,复制其中的tools目录,覆盖原来的tools目录。
    • 然鹅还是不行。。。。算了先回复成原来的吧。。

    安装KVM

    What's KVM?

    KVM实际是linux内核提供的虚拟化架构,可将内核直接充当hypervisor来使用。KVM需要处理器硬件本身支持虚拟化扩展,如intel VT 和AMD AMD-V技术。KVM自2.6.20版本后已合入主干并发行,除此之外,还以模块形式被移植到FreeBSD和illumos中。除了支持x86的处理器,同时也支持S/390,PowerPC,IA-61以及ARM等平台。

    工作原理

    KVM包含一个内核模块kvm.ko用来实现核心虚拟化功能,以及一个和处理器强相关的模块如kvm-intel.ko或kvm-amd.ko。KVM本身不实现任何模拟,仅仅是暴露了一个/dev/kvm接口,这个接口可被宿主机用来主要负责vCPU的创建,虚拟内存的地址空间分配,vCPU寄存器的读写以及vCPU的运行。有了KVM以后,guest os的CPU指令不用再经过QEMU来转译便可直接运行,大大提高了运行速度。但KVM的kvm.ko本身只提供了CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完整的虚拟化技术。

    What's QEMU-KVM?

    QEMU-KVM,是QEMU的一个特定于KVM加速模块的分支,里面包含了很多关于KVM的特定代码,与KVM模块一起配合使用。
    目前QEMU-KVM已经与QEMU合二为一,所有特定于KVM的代码也都合入了QEMU,当需要与KVM模块配合使用的时候,只需要在QEMU命令行加上 --enable-kvm就可以。

    • 执行以下命令以验证服务器的硬件是否支持虚拟化。如果输出结果大于 0,就意味着支持虚拟化。
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
    • 在linux终端安装东西的时候都要 sudo apt-get update 一下,然后安装KVM依赖:
    sudo apt-get install qemu-kvm
    sudo apt-get install qemu
    sudo apt-get install virt-manager
    sudo apt-get install virt-viewer 
    sudo apt-get install libvirt-bin 
    sudo apt-get install bridge-utils
    
    • 验证下,终端键入 kvm-ok,出现下面的界面,就说明已经装好了
    • 终端键入 sudo virt-manager ,可以进入图形界面。
    • 配置KVM:添加用户到kvm,libvirtd组,打开Terminal终端,输入:(例如你的用户名为xxx)
    sudo adduser xxx kvm
    sudo adduser xxx libvirtd
    

    • 可以使用以下命令测试安装是否成功:
    virsh list --all
    

    配置aapt

    aapt 为 Android Asset Packaging Tool , 在SDK的build-tools/目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk). 也可将资源文件编译成二进制文件。

    • 配置环境变量:
    sudo vim /etc/profile
    
    • 在其中添加:
    # Add Android build-tools AAPT variable
    export AAPT_HOME=/root/Android/Sdk/build-tools/29.0.3
    export AAPT_HOME
    export PATH=$PATH:$AAPT_HOME
    
    • 生效环境变量配置,命令行输入:
    source /etc/profile
    
    • 使用命令 aapt 检查:

    Add android-sdk/tools/lib to LD_LIBRARY_PATH.

    • 在终端下输入 sudo vim /etc/profile ,添加
    export LD_LIBRARY_PATH=/root/Android/Sdk/tools/lib:$LD_LIBRARY_PATH
    
    • 生效环境变量配置,命令行输入:
    source /etc/profile
    
    • 然后再输入 echo $LD_LIBRARY_PATH 即会显示:

    配置emulator

    • 在配置abd环境的时候其实就已经配置好这个了,它在sdk目录下的tools文件目录下。
    • 但是我发现这个命令只能在root权限下运行。。

    遇到的问题

    问题1

    • 店家帮我装好了anaconda和pycharm,但是我打开pycharm的时候发现没有菜单栏,连settings都找不到。
    • 解决方法:
      • 按Ctrl + Shift + A打开“Action”对话框,键入“Experimental features”,然后按Enter键。
      • 把linux.native.menu选项旁边的复选框的钩子去掉,变成空白选项,应用更改并关闭对话框。
      • 重启PyCharm

    问题2

    • 使用 pip 安装需要的模块的时候,出现下面这样的问题:
    you are using pip version 10.0.1,however version 20.0.2 is available
    You should consider upgrading via the ‘pip install --upgrade pip’ command.
    
    • 使用提示的更新命令:
    pip install --upgrade pip --user
    
    • 更新成功并可以安装所需模块:
    • 在安装urllib3==1.9的时候出现了如下错误,但是最后显示还是安装成功了,不知道会不会对后续的实验有影响,先把图放在这里吧:
    • 错误消息:
    ERROR: requests 2.19.1 has requirement urllib3<1.24,>=1.21.1, but you'll have urllib3 1.9 which is incompatible.
    
    • 在pycharm中添加conda的interpreter时候,出现如下问题:
    • 错误信息:
    /home/ubuntu/anaconda3/lib/python3.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.9) or chardet (3.0.4) doesn't match a supported version!
      RequestsDependencyWarning)
    
    pip install --upgrade urllib3
    pip install --upgrade requests
    
    • 后来又遇到下面问题,重新安装pycharm即可。

    • 我发现在命令行使用命令 pip list 显示所安装好的包之后,在pycharm的解释器环境中找不到对应安装好的包,使用命令 which python 查看ubuntu中安装的python路径,然后就可以找到在命令行安装好的包啦。

    问题3

    • 额。。,居然死机了,鼠标键盘都不动了。可能是我打开的窗口太多了。。
    • Ctrl + Alt + PrtSc (SysRq) + reisub ,再说明白一点,就是按住Ctrl,Alt和PtrSc(SysRq),按住他们的同时你需要按r,e,i,s,u,b 这样就能安全地重启linux

    问题4

    • 在配置完LD_LIBRARY_PATH之后,应该是这个环境变量配置错误,导致把PATH覆盖了(此时的我快崩溃了)
    • 恢复办法如下:
    /usr/bin/sudo vim /etc/profile          (由于找不到sudo,所以必须写全路径,其他命令如果提示找不到,也需要写全路径)
    
    • 在末尾加上:
    export PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    
    • 执行以下命令生效
    source /etc/profile
    

    2020.5.1

    • 今天打开测试运行环境,也也也太神奇了吧,上次这个 LD_LIBRARY_PATH 添加之后还不成功,今天打开居然检测成功啦!太开心了吧!就剩一个环境了!加油呀!

    • 嗯嗯,今天什么都没解决。。。


    2020.5.2

    • 我卡在运行make_device.py这里了,怎么都运行不了,昨天那个的emulator64-x86也还是no,死机了。

    • make_device.py中的这句话:

    p = pexpect.spawn('android create avd -n {} -t android-17 --snapshot'
                ' --sdcard 200M --abi x86'.format(sys.argv[1]), timeout=2)
    
    • 其中 spawn() 方法用来执行一个程序,它返回这个程序的操作句柄,以后可以通过操作这个句柄来对这个程序进行操作。
    • 命令 android create avd -n {} -t android-17 --snapshot --sdcard 200M --abi x86
    参数 含义
    -n AVD的名称(该项是必须的)
    -t 运行的android的平台版本编号id
    --snapshot 在AVD中设置一个快照文件
    --sdcard 新的sd卡的大小
    --abi 指定cpu架构 android list targe查看支持的cpu
    • timeout=2 就指定超时时间

    • p 就是 spawn() 的程序操作句柄了,之后对这个程序的所有操作都是基于这个句柄的,它可以说是最重要的部分。

    • 我好像知道问题的原因了,因为这个Android sdk是在安装Android studio的时候自动安装的,不支持 android 命令。┭┮﹏┭┮ 好吧,我重新装一下。

    • 先记录一下,这是目前为止配置的环境变量:

    • 下载https://dl.google.com/android/repository/tools_r25.2.3-linux.zip,然后直接把文件拖进sdk文件,直接覆盖,解决啦哈哈哈哈!


    2020.5.3

    • android 命令是可以执行。
    • 但是运行make_device.py还是老问题,总是说avdname的事情(还是对python不够熟悉)
    • 还是make_device.py中的这句代码,发现运行的时候需要传参:
    p = pexpect.spawn('android create avd -n {} -t android-17 --snapshot'
                ' --sdcard 200M --abi x86'.format(sys.argv[1]), timeout=2)
    
    • argv是一个list,它是sys模块下的一个全局变量(也称sys模块的属性),它的第一个元素是模块名、后面的元素是依次传入的参数!argv[1]代表第一个参数,这里是创建的avd的名字。

    • 传参之后出现了如下错误:

    • 查阅资料说是可能是权限的问题,然后 sudo su 进入root,再次执行 python3 make_device.py (这里我修改了一下代码不用传参) :

    • 分析发现异常的原因是expect()语句超时,期望得到的结果没有得到,直到超时抛出异常。

    • 查看已有的或新创建的AVD: android list avd

    • 运行指定的AVD: emulator -avd AVD名


    2020.5.4

    • 出现pexpect.EOF异常错误、pexpect.TIMEOUT异常错误
    • 查阅资料说这两个错误可以使用try语句来处理报错,于是我在def main()中进行了如下修改:
    try:
        ……
    except pexpect.EOF:
        pass
    except pexpect.TIMEOUT:
        pass
    
    • 是没有继续报错,查看创建的avd的时候并没创建成功。
    • try这个关键字来捕获异常:
    try:尝试执行的代码
    except:出现错误的处理
    
    • 所以上面的修改并没有实质性地解决问题。。。

    • 发现其中有个错误是运行的android的平台版本编号id无效。

    • 使用 android list targets 查询android版本编号,将代码中原来的17更改为29

    • 更改后再次运行,发现如下问题:没有ABI,然后在命令行使用命令 android sdk 打开 Android SDK Manager ,然后选择安装ABI,注意:下载时必须下载带有system image的项目,不然创建AVD时就会报如下的错误。参考

    • 下载完成之后再次运行,又出现了问题。。。

    • 查看了这篇文章,说是要添加前缀,就是下图红色框框中的:

    • 添加之后可以运行啦!

    • 运行的过程中会出现类似以下这样的问题,我就照着在相应的位置(运行卡住的模块后面)添加对应的模块,一共添加了如下九个模块(猜测可能是因为修改了android的平台版本编号导致)。








    • 使用命令 android list avd 查看新创建的AVD,发现错误 The following Android Virtual Devices could not be loaded


    2020.5.5

    • 查了好多资料,说这个问题的原因是Android Studio安装和Sdk的安装位置不在同一个盘符下面,还有就是ANDROID_AVD_HOME这个环境变量要是SDK目录,然后我修改了环境变量,整体的环境变量如下:

    • 之后再次运行make_device.py,没抱希望的情况下,居然成功啦!老泪纵横o(╥﹏╥)o

    • 不过马上又有了新的问题,执行命令emulator -avd y 运行刚刚创建的avd:

    • 参考这篇博客,将 /Android/ubuntu/Android/Sdksystem-imagesandroid-27google_apisx86 目录下的“kernel-ranchu-64” 文件改名为 “kernel-qemu”,然后重新 start 虚拟机

    • 居然告诉我设备上没有空间。。。

    • 累到没有骂人的力气。。

    • 来看一下上面是warning:

    emulator: WARNING: System image is writable
    
    • 说明启动可写方式成功,但此时terminal处于等待状态,无法再进行操作,如果关闭当前terminal,打开的模拟器也会随之关闭。所以需要再重新打开一个terminal进行后续操作。
    emulator: WARNING: Classic qemu does not support SMP. The hw.cpu.ncore option from your config file is ignored.
    
    • 更新sdk tools,不过我更新之后还是不行

    2020.5.30

    • 之前实验设备空间不够,又斥巨资买了一个大一点的环境,按照上面的步骤重新设置了实验环境,下面是遇到的一些问题。
    • 没有 intel atom system image 这一项,刷新后也仍然没有:大概是连接不到官网更新的问题。

    • SDK需要使用国内镜像地址更新,但是我把这里的镜像都试过了,都不行,后来开了一个代理,地址 127.0.0.1 ,端口 10809 。然后提权了一下居然可以了!!!感恩!!

    2020.5.31

    • 在创建虚拟机的时候出现了下面的问题,这也不是一个报错的语句啊,回想到在之前环境中做实验说不支持SMP,查阅资料说应该是创建虚拟机和选择的cpu构架与有冲突

    • 查看之前的记录发现是缺少一些模块,这里把之前环境调试好的代码粘贴了过来。

    • 在执行 make_device.py 的时候又出现了相同的问题:

    Failed to parse properties from /home/ubuntu/Android/Sdk/.android/avd/y.avd/config.ini
    
    • 根据官网的描述,虚拟机数据路径默认规则是:
    ~/.android/avd/name.avd/
    
    • 其中 name 就是虚拟机的名称, ~ 是主机上的android主目录,可以通过 ANDROID_SDK_HOME 来动态指定。

    2020.6.1

    • 上面这个问题整整困扰了我一天半的时间。。。

    • 创建过程中出现的问题如下,发现有很多 EOF 和 TIMEOUT 的字样,查阅资料,分析异常:

    • TIMEOUT 异常:如果子程序没有在指定的时间内生成任何 output,那么 expect()read() 都会产生 TIMEOUT 异常。超时默认是 30s,可以在 expect()spawn 构造函数初始化时指定为其它时间。若想让 expect()read() 忽略超时限制,即无限期阻塞住直到有 output 产生,设置 timeout 参数为 None。

    • 原来的代码如下:

    p = pexpect.spawn('android create avd -n {} -t android-17 --snapshot'
                ' --sdcard 200M --abi x86'.format(sys.argv[1]), timeout=2)
    
    • 这个等待 2s 是不是有点短,试着改成 None 之后,居然成功了(真的是等了好久才创建出来),热泪盈眶o(╥﹏╥)o

    • 执行命令 emulator -avd y 运行刚刚创建的avd:
    • 终于创建成功!!!妈耶不容易。。。
    • 虽然可以显示出来,但在运行的过程中有很多warning如下:
    • 不知道会不会对后面实验有影响,先记录一下吧,希望后面实验不要太费事了,要秃了。。
    WARNING: Force to use classic engine to support snapshot.
    emulator: WARNING: System image is writable
    emulator: WARNING: Classic qemu does not support SMP. The hw.cpu.ncore option from your config file is ignored.
    emulator: WARNING: Host CPU is missing the following feature(s) required for x86 emulation: SSSE3
    Hardware-accelerated emulation may not work properly!
    [139693859899136]:WARNING:./android/base/files/IniFile.cpp:158:Failed to process .ini file /home/ubuntu/Android/Sdk/.android/avd/y.avd/snapshots.img.default-boot.ini for reading.
    ...
    [139693859899136]:WARNING:./android/base/files/IniFile.cpp:158:Failed to process .ini file /home/ubuntu/Android/Sdk/.android/emu-update-last-check.ini for reading.
    ...
    

    2020.6.3

    • 与KVM模块配合,通过命令启动虚拟机(这里注意提权,不提权打不开):
    emulator64-x86 -avd y -no-snapshot-load -qemu -m 512 -enable-kvm
    
    • Snapshot的意思是“快照”:能够保存AVD关闭时的状态,然后再下一次启动的时候显示上一次关闭时的状态,类似缓存机制。
    命令行选项 说明
    -no-snapshot-load 阻止模拟器从快照存储加载 AVD 状态。执行完整启动。执行冷启动,并在退出时保存模拟器状态。
    -no-snapshot-save 如果可能,执行快速启动,但在退出时不保存模拟器状态。也就是阻止模拟器在退出时将 AVD 状态保存到快照存储,这意味着所有更改都将丢失。
    -m 512 是给客户机分配512MB内存
    -enable-kvm 利用 KVM 来访问硬件提供的虚拟化服务



    • 打开的速度和上次没有使用kvm相比较果然飞快!!!

    运行程序

    检查试验环境

    参考文献

  • 相关阅读:
    使用 OpCache 提升 PHP 性能
    在线视频开发博客教程
    修正ECMALL在PHP5.3以上版本中无法开启支付方式的BUG
    第二个小项目的讲解后感言
    mybatis进行分页,使用limit
    mybatis传递多个参数值(转)
    一个关于前端页面的小标签<tbody>
    json-lib的一些过滤操作
    关键字volidate和transient(转)
    Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口
  • 原文地址:https://www.cnblogs.com/yangdd/p/12996488.html
Copyright © 2011-2022 走看看