Building Android from source - emulator and AVDs
Solution 1
You shared that:
Apparently variables such as ANDROID_PRODUCT_OUT should be automatically created during a build and using the envSetup.sh script. I guess something has gone wrong with my environment setup for this not to happen.
I ALSO ATTEMPTED to get this to work and LEARNED that:
lunch full-eng
sets up all the appropriate env- to check it, simply run:
env | grep ANDROID
and you will see all the appropriate env variables setup.
These are local to the current shell only! emulator
then does what it should.
When I came back to the shell later, I simply ran lunch full-eng again to restore my environment.
I hope this helps others as well!
Solution 2
Just do the following:
source build/envsetup.sh or . build/envsetup.sh
setpaths
That does the trick. Make sure you run it from your source directory.
Solution 3
To check my built sources for emulator I've created the following script in the root folder of the project. I run it from another command line and it does not require to run all the time running . build/envsetup.sh
and lunch full-eng
commands. You can edit this script for your needs and if you need to run other device - simply change folder.
out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/ -system out/target/product/generic/system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img -kernel prebuilt/android-arm/kernel/kernel-qemu -sdcard sdcard.img -skindir sdk/emulator/skins -skin WVGA800 -scale 0.7 -memory 512 -partition-size 1024
Solution 4
You can add these to your .bashrc file
export ANDROID_PRODUCT_OUT=$ANDROID_SRC/out/target/product/generic
export ANDROID_BIN=$ANDROID_SRC/out/host/linux-x86/bin
PATH=$ANDROID_BIN:$PATH
Jack
Updated on March 21, 2020Comments
-
Jack about 4 years
I have built the Android source for the emulator. I read in the Android Source documentation that the path to 'emulator' is added autmatically during a successful build. However I have two questions about this:
If I open a new shell or close my existing shell, 'emulator' is no longer found. Surely I don't have to build each time I want to run the emulator?
If the emulator requires an AVD how do I create and manage these given there is no Android SDK on my machine?
Thanks, Jack
SOLUTION to part 2.
I needed to create an environment variable called ANDROID_PRODUCT_OUT. From the the following command:
emulator -help-build-images
I read...
The emulator detects that you are working from the Android build system by looking at the ANDROID_PRODUCT_OUT variable in your environment.
If it is defined, it should point to the product-specific directory that contains the generated system images.
I then did a search for 'system.ing' in my 'out' directory. since I am building for the emulator the image was in:
out/target/product/generic
I added the following line to my .bashrc file:
export ANDROID_PRODUCT_OUT=/home/jack.wootton/code/out/target/product/generic
I was then able to run the emulator from:
/home/jack.wootton/code/out/host/linux-x86/bin
SOLUTION to part 1.
I don't know about Android Virtual Devices, so this question still stands - however I did not need to provide one to run the emulator after doing a successful build and setting the ANDROID_PRODUCT_OUT environment variable.
Update to solutions
Apparently variables such as ANDROID_PRODUCT_OUT should be automatically created during a build and using the envSetup.sh script. I guess something has gone wrong with my environment setup for this not to happen.
-
Junaid over 11 yearsThat was the shortest trick. Thanks for posting.
-
MDMoore313 over 10 years+1, this solved my problem same as OP's. only thing I'll add is that coming back to a shell I would run
. build/envsetup.sh
thenlunch full-eng
, as envsetup gives additional variables and commands, most importantly thelunch
command!