1. 程式人生 > >ubuntu 執行android模擬器(emulator)零星筆記、心得

ubuntu 執行android模擬器(emulator)零星筆記、心得



android 2.3.3
export ANDROID_PRODUCT_OUT=/home/android_source/android-2.3.3_r1/out/target/product/generic
export PATH=$PATH:/home/android_source/android-2.3.3_r1/out/host/linux-x86/bin
emulator
adb shell


android 4.2
export ANDROID_PRODUCT_OUT=/home/android_source/android-4.2_r1/out/target/product/generic
export PATH=$PATH:/home/android_source/android-4.2_r1/out/host/linux-x86/bin
emulator



///export ANDROID_SWT=/home/android_source/android-4.2_r1/out/host/linux-x86/framework


emulator -system system.img -data userdata.img -ramdisk ramdisk.img

android create avd -n myemulator -f -p /home/android_source/android-4.2_r1 -t 1



make kernal
export PATH=$PATH:/home/android_source/android-4.2_r1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin

#make goldfish_defconfig  會造成不能啟動模擬器的情況

make goldfish_armv7_defconfig

make

編譯結果:

then arch/arm/boot/zImage  is created


編譯環境的安裝:
http://blog.csdn.net/yf210yf/article/details/9206269

原始碼的編譯:

source build/envsetup.sh
lunch full-eng
make


執行模擬器
在終端中執行:emulator


在  ~/.bashrc
新增環境變數:
export ANDROID_PRODUCT_OUT=~/code/android-4.2/out/target/product/generic
export ANDROID_SWT=~/code/android-4.2/out/host/linux-x86/framework/


備註:

重啟系統後:
執行emulator,出現如下錯誤:
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.
If you are an Android SDK user, please use '@<name>' or '-avd <name>'
to start a given virtual device (see -help-avd for details).
Otherwise, follow the instructions in -help-disk-images to start the emulator

解決:
source build/envsetup.sh 
lunch sdk-eng

然後再執行
emulator
可以啟動模擬器



emulator: WARNING: system partition size adjusted to match image file (216 MB > 200 MB)
解決:   emulator -partition-size 300


我按你所描述的步驟編譯了goldfish2.6.29,生成了zImage,emulator -kernel xxxx/zImage 後可以啟動模擬器,但是看不到Android畫面,一直是黑乎乎的。    自己發現了原因:原來要$ make goldfish_armv7_defconfig



模擬器執行需要四個檔案,分別是Linux Kernel映象zImage和Android映象檔案system.img、userdata.img和ramdisk.img。執行emulator命令時,如果不帶任何引數,則Linux Kernel映象預設使用~/Android/prebuilt/android-arm/kernel目錄下的kernel-qemu檔案,而Android映象檔案則預設使用ANDROID_PRODUCT_OUT目錄下的system.img、userdata.img和ramdisk.img,也就是我們剛剛編譯出來的映象問題。
    當然,我們也可以以指定的映象檔案來執行模擬器,即執行emulator時,即:

   

[email protected]:~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img

資源描述:

 frameworks/base/libs/utils/RefBase.cpp: In member function 'void android::RefBase::weakref_type::trackMe(bool, bool)':
frameworks/base/libs/utils/RefBase.cpp:507:67: error: passing 'const android::RefBase::weakref_impl' as 'this' argument of 'void android::RefBase::weakref_impl::trackMe(bool, bool)' discards qualifiers [-fpermissive]
解決辦法:
編輯frameworks/base/libs/utils/Android.mk檔案,修改
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)

LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissive

修改之後出現錯誤:

   g++: 錯誤: –fpermissive:沒有那個檔案或目錄

Ubuntu 11.04升級到12.04 後發現編譯Android出現錯誤(之前是OK的),具體錯誤和解決辦法如下:

問題1:

frameworks/base/libs/utils/RefBase.cpp: 在成員函式‘void android::RefBase::weakref_type::trackMe(bool, bool)’中:

frameworks/base/libs/utils/RefBase.cpp:483:67: 錯誤: 將‘const android::RefBase::weakref_impl’作為‘void android::RefBase::weakref_impl::trackMe(bool, bool)’的‘this’實參時丟棄了型別限定 [-fpermissive]

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] 錯誤 1

原因:Ubuntu 11.10的gcc 4.6版本太高了,android編譯需要gcc 4.4

解決辦法:更換gcc、g++版本4.6為4.4

sudo apt-get install gcc-4.4

sudo apt-get install g++-4.4

sudo rm -rf /usr/bin/gcc /usr/bin/g++

sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc

sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++

問題2:

g++: 錯誤: –fpermissive:沒有那個檔案或目錄

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] 錯誤 1

解決辦法:sudo apt-get install g++-4.4-multilib

經過此操作編譯可順利進行。


相關推薦

ubuntu 執行android模擬器emulator零星筆記心得

android 2.3.3 export ANDROID_PRODUCT_OUT=/home/android_source/android-2.3.3_r1/out/target/product/generic export PATH=$PATH:/home/androi

模擬器emulator模擬器simulator的區別

模擬器(emulator)和模擬器(simulator)是比較容易混淆的概念,這兩個概念不僅針對計算機體系結構,在很多方面都有所應用,例如航空模擬器、街機模擬器等。 模擬器(simulator)是用於分析研究目標系統本身,模擬器系統本身要跟目標系統保持一致。例如飛行模擬器對於使用者來講其本身要跟

【Mac + Appium + Python3.6學習(六)】之安裝Android模擬器Genymotion並運行模擬器進行自動化

註冊 允許 rgba tin 字符 虛擬 macos 運行 class 環境: MacOS:10.13.6 Virtualbox:5.2.22 Genymotion:genymotion-2.12.2 本文Virtualbox、Genymotio

移動開發中的模擬器Emulator模擬器Simulator

本文主要涉及到兩個概念: Emulator 和 Simulator。通常我們在工作中可能統統習慣稱為“模擬器”,但實際上二者有所不同。為了分清概念,本文將 Emulator 譯作 “模擬器”, Simulator 譯作 “模擬器”。聽起來可能略拗口,如產生生理或心理不適,敬

java多執行緒系列:ThreadRunnableCallable實現多執行緒的區別

實現多執行緒 java實現多執行緒的方法有三種,分別是繼承thread類,實現runnable介面,實現callable介面(call方法有返回值) /** * 繼承Thread */ public class MyThread extends Thread{ int a = 0;

Android 動畫幀動畫補間動畫

1.Frame Animation(幀動畫) 幀動畫就是把多張圖片在定義的短時間內完成順序播放,最終呈現在視覺上的動態效果;幀動畫首先得具有圖片資源。 下面是幀動畫在Android開發中的具體實現: (1)activity_main.xml檔案: <

Android模擬器Android Emulator 使用的快捷鍵引數注意事項

Android Emulator是一款功能非常齊全的模擬器,電話本、通話等功能都可進行模擬。甚至其內建的瀏覽器和Google Maps都可以聯網。使用者可以使用鍵盤輸入,單擊模擬器按鍵輸入,甚至還可以使用滑鼠單擊、拖動螢幕進行操作。 1.模擬器和真機的不同之處     * 不支援呼叫和接聽實際來電,但可以通過

Android可以在子執行緒更新重新整理UI---"假象"

有時候,我們線上程裡面需要彈框,然而在用Toast彈框後,會出一個Can't create handler inside thread that has not called Looper.prepare()  錯誤。。。。原因很簡單就是因為安卓介面更新的操作需要在主執行緒操作. 實現

Android可以在子執行緒更新重新整理UI---"假象"

有時候,我們線上程裡面需要彈框,然而在用Toast彈框後,會出一個Can't create handler inside thread that has not called Looper.prepare()  錯誤。。。。原因很簡單就是因為安卓介面更新的操作需要在主執行緒操

Android應用程式視窗Activity執行上下文環境Context的建立過程分析

                        在前文中,我們簡要介紹了Android應用程式視窗的框架。Android應用程式視窗在執行的過程中,需要訪問一些特定的資源或者類。這些特定的資源或者類構成了Android應用程式的執行上下文環境,Android應用程式視窗可以通過一個Context介面來訪問它,

Android執行緒-----非同步IntentService

一、Service 是什麼 1、大家隨口就能答得上來,Service是一個在後臺執行長時間執行操作而不用提供使用者介面的應用元件,可由其他元件啟動,即使使用者切換到其他應用程式,Service 仍然在後臺繼續執行。 2、service的弊端: service既不是獨立的程序也不是獨立的執行緒

Android執行緒-----非同步Handlers

一、為什麼要使用Handlers? 因為,我們當我們的主執行緒佇列,如果處理一個訊息超過5秒,android 就會丟擲一個 ANP(無響應)的訊息;所以,我們需要把一些要處理比較長的訊息,放在一個單獨執行緒裡面處理,把處理以後的結果,返回給主執行緒執行,就需要用的Handler來進行執行緒建的通

Android執行緒-----非同步AsyncTask

一、總述 在Android當中,提供了非同步訊息處理機制的兩種方式來解決執行緒之間的通訊問題,一種是通過Handler的機制(這種方式在後面的部落格中將詳細介紹),還有一種就是今天要詳細講解的 AsyncTask 機制。 Android中的工作者執行緒主要有AsyncTask、In

Android執行緒池ThreadPoolExecutor類原始碼解析

使用ThreadPoolExecutor private final int CORE_POOL_SIZE = 4;//核心執行緒數 private final int MAX_POOL_SIZE = 5;//最大執行緒數 priv

Android開發環境配置與建立模擬器

時間:大二下學期期末,2018年6月13日凌晨1點原因:Java期末作業平臺:Eclipse + Mac(強調!!時間寶貴,別走錯片場浪費了時間)第一次也可能是最後一次...——————————————————————————————————一、Eclipse中安卓開發環境配

Ubuntu 16.04上為樹莓派(RaspBerry Pi 3)編譯Android 7Nougat

1. 環境準備和介紹         本文章的測試環境如下: 軟體環境:VMware Workstation Pro + Ubuntu 16.04  64 bit,虛擬機器的記憶體配置6GB,4個CPU 硬體環境:RaspBerry Pi3 + 16GB SD卡 測試

Android studio連線夜神模擬器之一

(1)執行夜神模擬器 (2)開啟命令列視窗 (3)開啟到夜神安裝目錄(預設安裝在D:\Program Files\Nox\bin) (4)執行命令:nox_adb.exe connect 127.

Android執行緒研究4——從一道面試題說起

有一道這樣的面試題:開啟一個子執行緒和主執行緒同時執行,子執行緒輸出10次後接著主執行緒輸出100次,如此反覆50次。先看下面程式碼:package com.maso.test; /** * * @author Administrator * 兩個執行緒,其中是一個

android 程序/執行緒管理----訊息機制的框架

一:android 程序和執行緒 程序是程式執行的一個例項。android通過4大主件,弱化了程序的概念,尤其是在app層面,基本不需要關係程序間的通訊等問題。 但是程式的本質沒有變,尤其是多工系統,以事件為驅動的軟體系統基本模式都是如下: 程式的入口一般是main: 1.初始化: 比如建立視窗,申

android 程序/執行緒管理----關於執行緒的迷思

一:程序和執行緒的由來 程序是計算機科技發展的過程的產物。 最早計算機發明出來,是為了解決數學計算而發明的。每解決一個問題,就要打紙帶,也就是打點。 後來人們發現可以批量的設定命令,由計算機讀取這些命令,並挨個執行。 在使用的過程中,有一個問題,如果要做I/O操作,是非常耗時的,這個時候CPU是閒著的