adb install -r 替换已存在的应用程序,也就是说强制安装
adb install -l 锁定该应用程序
adb install -t 允许测试包
adb install -s 把应用程序安装到sd卡上
adb install -d 允许进行将见状,也就是安装的比手机上带的版本低
adb install -g 为应用程序授予所有运行时的权限
adb install -r 替换已存在的应用程序,也就是说强制安装
adb install -l 锁定该应用程序
adb install -t 允许测试包
adb install -s 把应用程序安装到sd卡上
adb install -d 允许进行将见状,也就是安装的比手机上带的版本低
adb install -g 为应用程序授予所有运行时的权限
基于 Android 9.0。
许多命令时间一长就记不清了,记录一下。
Android 环境引入的命令
在shell中执行"source build/envsetup.sh"后,Android将增加一些命令到当前环境中。
lunch:选择编译的产品类型,并存储在当前环境中。
lunch <product_name>-<build_variant>
tapas:与 'lunch' 类似,可以指定编译的应用。
tapas [<App1> <App2> ...] [arm|x86|mips|arm64|x86_64|mips64] [eng|userdebug|user]
printconfig:打印当前配置。
croot:切换到顶层目录
m:从顶层目录开始编译。
mm:编译当前目录中的所有模块,但不包含依赖的模块。
mmm:编译指定目录的所有模块,但不包含依赖的模块。可以使用下述方式限制编译的模块。
mmm dir/:target1,target2.
mma:编译当前目录中的所有模块,包含依赖的模块。
mmma:编译指定目录的所有模块,包含依赖的模块
provision:对设备进行固件升级,选项将被传递到 fastboot 中。
cgrep:在当前目录的所有 C/C++ 文件中查找。
ggrep:在当前目录的所有 Gradle 文件中查找。
jgrep:在当前目录的所有 Java 文件中查找。
resgrep:在当前目录的所有 res/*.xml 文件中查找。
mangrep:在当前目录的所有 AndroidManifest.xml 文件中查找。
mgrep:在当前目录的所有 Makefiles 文件中查找。
sepgrep:在当前目录的所有 sepolicy 文件中查找。
sgrep:在当前目录的所有文件中查找。
godir:切换到包含指定文件的目录。
make相关命令
make 或 m 后面可以跟随不同的参数来指定编译目标。
droid:默认的 make 编译目标。
all:编译所有内容,包括不含droid标记的内容。编译服务器会运行此命令,以确保项目中包含Android.mk文件的所有元素都会编译。
checkbuild:编译所有的模块。
showcommands:显示编译步骤中实际的编译指令。
PRODUCT-xxx-yyy:编译指定的产品。
dump-products:显示产品的编译信息。
LOCAL_MODULE:编译指定的模块。例如,
make runtime
nothing:不编译任何事情,只是解析和验证编译框架。
java:编译项目中的所有java代码。
native:编译项目中的所有native代码。
host:编译host端代码。
target:编译target端代码。
(java|native)-(host|target):按组合编译限定代码。
(host|target)-(java|native):按组合编译限定代码。
snod:快速重新编译system镜像。
vnod:快速重新编译vendor镜像。
pnod:快速重新编译product镜像。
update-api:更新SDK API。
otapackage:生成OTA升级包。
updatepackage:生成zip升级包。
docs:编译文档。
ndk-docs:生成ndk文档。
sdk:编译生成SDK。
ndk:编译生成NDK。
ramdisk:编译生成ramdisk。
systemtarball:生成system的tar包。
boottarball:生成boot的tar包。
userdatatarball:生成data的tar包。
systemimage:生成system.img镜像。
bootimage:生成boot.img镜像。
vbmetaimage:生成vbmeta.img镜像。
userdateimage:生成userdata.img镜像。
cacheimage:生成cache.img镜像。
bptimage:生成partition-table.img镜像。
vendorimage:生成vendor.img镜像。
productimage:生成product.img镜像。
apps_only:编译不包含 user,userdebug,eng 标签的应用程序。
dist:拷贝输出到dist目录。
dist_files:仅仅拷贝库文件到dist目录。
libandroid_runtime:编译JNI相关内容。
framework:编译java framework相关内容。
services:编译系统服务相关内容。
cts:编译CTS测试套件。
vts:编译VTS测试套件。
make clean 相关命令
clean:清除当前配置编译的所有文件,等同于rm -rf out/<configuration>/。
**clean-$(LOCAL_MODULE):清理指定模块的编译结果。
clean-$(LOCAL_PACKAGE_NAME):清理指定包的编译结果。
clobber:清除所有输出,等同于rm -rf out/。
dataclean:删除当前配置上data目录的所有文件。
clean-sdk:清理SDK编译输出。
installclean:清除与编译类型相关的文件。在切换编译目标是使用该命令可以加快编译。
# 编译过程输入的 shell 命令 | |
500 sudo dd if=/dev/zero of=/swp bs=10M count=400 | |
501 sudo mkswap /swp | |
502 sudo swapon /swp | |
503 free -m | |
504 export LC_ALL=C | |
505 m -j32 | |
506 history >> history_txt | |
cd Desktop/ | |
ls | |
tar -zxvf VMwareTools-10.3.10-13959562.tar.gz | |
ls | |
cd vmware-tools-distrib/ | |
./vmware-install.pl | |
sudo ./vmware-install.pl | |
cd Desktop/ | |
cat read.txt | |
vim read.txt | |
mkdir myaosp && cd myaosp | |
git config --global user.name "qiled" | |
git config --global user.email "[email protected]" | |
mkdir ~/bin | |
PATH=~/bin:$PATH | |
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | |
vim ~/.bashrc | |
source ~/.bashrc | |
proxychains curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | |
chmox a+x ~/bin/repo | |
chmod a+x ~/bin/repo | |
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 | |
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150 | |
python | |
df -h | |
echo $PATH | |
sudo apt install proxychains | |
vim | |
sudo apt install vim | |
sudo vim /etc/proxychains.conf | |
proxychains curl ip.sb | |
curl | |
sudo apt install curl | |
proxychains curl ip.sb | |
sudo proxychains apt-get update && sudo apt-get upgrade | |
proxychains sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig openjdk-8-jdk htop tree p7zip-full python python3 | |
repo --help | |
ls -lah | |
proxychains curl ip.sb | |
rm -rf ~/bin/repo | |
proxychains curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | |
chmod a+x ~/bin/repo | |
repo --help | |
sudo apt install proxychains4 | |
cd ~/bin | |
ls -lah | |
rm -rf repo | |
sudo gedit /etc/proxychains4 | |
sudo vim /etc/proxychains4 | |
curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo | |
ls -lah | |
chmod a+x ~/bin/repo | |
repo --help | |
vim repo | |
cd ~/myaosp/ | |
ls -lah | |
cd .. | |
rm -rf myaosp/ | |
mkdir aosp10 | |
cd aosp10/ | |
ls -lah | |
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-10.0.0_r1 --depth=1 | |
repo sync -c -j4 | |
df -h | |
du -sh ../aosp10/ | |
proxychains wget https://dl.google.com/dl/android/aosp/google_devices-sailfish-qp1a.190711.019-a7ebdda4.tgz | |
proxychains wget https://dl.google.com/dl/android/aosp/qcom-sailfish-qp1a.190711.019-a2f14717.tgz | |
ls -lah | |
sha256sum google_devices-sailfish-qp1a.190711.019-a7ebdda4.tgz | |
sha256sum qcom-sailfish-qp1a.190711.019-a2f14717.tgz | |
tar -xzf qcom-sailfish-qp1a.190711.019-a2f14717.tgz | |
tar -xzf google_devices-sailfish-qp1a.190711.019-a7ebdda4.tgz | |
ls -lah | |
rm google_devices-sailfish-qp1a.190711.019-a7ebdda4.tgz qcom-sailfish-qp1a.190711.019-a2f14717.tgz | |
ls -lah | |
du -sh ../aosp10/ | |
ls -lah | |
du -sh ../aosp10/ | |
htop | |
du -sh ../aosp10/ | |
du -s ../aosp10/ | |
du -sh ../aosp10/ | |
date | |
ls -lah | |
./extract-google_devices-sailfish.sh | |
./extract-qcom-sailfish.sh | |
df -h ./aosp10/ | |
du -h ./aosp10/ | |
du -sh ../aosp10/ | |
du -sh /aosp10/ | |
du -sh ./aosp10/ | |
du -sh ./aosp10/out/ | |
du -sh ./aosp10/ | |
ls | |
cd aosp10/ | |
ls | |
cd out/ | |
ls | |
cd target/ | |
ls | |
cd product/ | |
ls | |
cd sailfish/ | |
ls | |
history | |
cd aosp10/ | |
ls -lah | |
python | |
. build/envsetup.sh && lunch | |
. build/envsetup.sh && lunch aosp_sailfish-userdebug | |
m | |
history | |
ls -lah | |
cd out/target/product/ | |
ls -lah | |
cd sailfish/ | |
ls -lah | |
7zr a -t7z -mmt$(nproc --all) ~/pixel1_aosp10r1_-userdebug.7z ./*.img ./android-info.txt | |
ls -lah | |
ls -ah | |
cd ~/aosp10/ | |
ls -lah | |
htop | |
ls -lah | |
sha256sum pixel1_aosp10r1_-userdebug.7z | |
7z l pixel1_aosp10r1_-userdebug.7z | |
sha256sum pixel1_aosp10r1_-userdebug.7z | |
ls | |
mdsum pixel1_aosp10r1_-userdebug.7z | |
sha256sum pixel1_aosp10r1_-userdebug.7z | |
ls | |
cd aosp10/ | |
ls | |
cd out/target/product/sailfish/ | |
s | |
ls | |
cd ~. | |
cd ~ | |
history | |
history > ~/Desktop/history.txt |
# 刷机脚本 | |
# 其中bootloader 和 radio 两个img文件修改成 你自己下载的恢复包里面的文件名字 | |
adb reboot bootloader | |
fastboot flash bootloader bootloader-sailfish-8996-012001-1706221457.img | |
fastboot reboot-bootloader | |
fastboot flash radio radio-sailfish-8996-013053-1708040002.img | |
fastboot reboot-bootloader | |
fastboot flash system system.img | |
fastboot flash ramdisk ramdisk.img | |
fastboot flash vendor vendor.img | |
fastboot flash userdata userdata.img | |
fastboot flash boot boot.img | |
fastboot reboot |
Android源码目录下的build/envsetup.sh文件,描述编译的命令
m: Makes from the top of the tree. mm: Builds all of the modules in the current directory. mmm: Builds all of the modules in the supplied directories. 要想使用这些命令,首先需要在android源码根目录执行. build/envsetup.sh 脚本设置环境
m:编译所有的模块 mm:编译当前目录下的模块,当前目录下要有Android.mk文件 mmm:编译指定路径下的模块,指定路径下要有Android.mk文件 mmm 命令只能编译有 Android.mk 文件的目录,比如修改了 android/frameworks/base/core/res/res/layout/ 目录下的布局文件, 而该路径中,base/ 目录和第一个 res/ 目录都包含 Android.mk 文件,这个时候,你只需要编译 res/ 目录,命令如下: mmm frameworks/base/core/res/
note: 假如编译没问题在测试的时候遇到了崩溃,可能是从新编译的包,其他地方的一些资源引用不成功导致。还是上面的例子,如果你修改了 android/frameworks/base/core/res/res/layout/ 目录下的布局文件,编译完 res/ 目录后,还需要编译 base/ 目录, 然后两次编译生成的 jar 包和 apk 文件,都要推送,才能确保万无一失。
指令不可用错误:需要先source build/envsetup.sh ,然后lunch,才能使用,已经source过就不需要。 原因:初次进入 Ubuntu 系统,或者切换用户后,需要重新配置编译环境.
repo
源下载# 更新apt源
sudo apt update
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo # 建议手动下载push到bin目录下
## 如果上述 URL 不可访问,可以用下面的:
## curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo
10M/s
大概下载3小时)mkdir ~/Desktop/aosp
cd aosp
# 配置git网络连接模式vpn(配置自己的vpn连接,加快下载速度)
git config --global http.proxy 'socks5://192.168.43.54:7890'
# 初始化后同步android-8.0.0_r2源码
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.0.0_r2
repo sync
## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
sudo apt install openjdk-8-jdk
sudo apt install python
# 进入同步后的源码目录
cd aosp800_r2
# 配置git
git config --global user.name "Your Name" // 复制即可
git config --global user.email "[email protected]" // 复制即可
# 查找手机版本对应的Build型号 -- https://source.android.com/setup/start/build-numbers
# sialfish8.0.0_r2 为 OPR6.170623.011
# 下载版本对应驱动(8.0.0_r2为OPR6.170623.011) -- https://developers.google.cn/android/drivers
# 将解压出来的sh文件放到aosp800_r2源码目录,并给权限chmod 777 xx.sh
binaries for Android 8.0.0 (OPR6.170623.011)
Hardware Component Company Download SHA-256 Checksum
Vendor... Google Link aca1f68551b9bded90c0a4fe70861d360c9b112e31344dacaf0908014d339901
GPS... Qualcomm Link f189573fa7a8a22291ac4447661fc709c80c61b69d04d11d157e61a506fcaec1
# 将上面下载的sh文件放到aosp800_r2目录下并执行
./extract-google_devices-sailfish.sh
./extract-qcom-sailfish.sh
# 在源码目录下的 build/envsetup.sh 最后一行加上
export LC_ALL=C
source build/envsetup.sh
lunch 23 # 指定为sailfish-userdebug版本
make -j4 # 核数较少,开启4线程即可,编译过程报错可不管,能继续执行不停止即可
# 可能产生的问题
xxx.so:no such file
# 解决办法
# 在aosp800_r2源码目录查找该so文件,例如缺失的为libncurses.so.5链接库
find ./ -name libncurses.so.5
# 获取到该文件路径,复制到/usr/lib下,缺哪个链接文件,就复制哪个链接文件即可
sudo cp youraosplib/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/lib/libncurses.so.5 /usr/lib
# 再次执行
source build/envsetup.sh
lunch 23 # lunch aosp_sailfish-user: 不带root版本的系统
make -j4 # 2~3小时编译完成
此处以8.0.0_r2刷机为例
下载google factory images镜像 -- https://developers.google.cn/android/images#sailfish
Version Download SHA-256 Checksum
8.0.0 (OPR6.170623.011...) Link 0d71259400371b8da44e6300324dbd6cbe26d6ae2641745becab9d7d1607e9db
下载镜像后解压,生成 <sailfish-opr6.170623.011> 文件夹
编译完成后,将 <sailfish-opr6.170623.011> 文件夹中的 <image-sailfish-opr6.170623.011.zip> 文件解压
解压后将原始 <image-sailfish-opr6.170623.011.zip> 文件删除
将解压出来的 <image-sailfish-opr6.170623.011> 文件夹下的文件删除,只保留android-info.txt
将 </home/adair/Desktop/aosp/aosp800r2/out/target/product/sailfish> 中生成的所有img文件复制到 <image-sailfish-opr6.170623.011> 文件夹下
在 <image-sailfish-opr6.170623.011> 文件夹里全选文件,并压缩为.zip文件到当前目录(不要嵌套,即该压缩文件解压就是所有的img文件,而不是解压出来一个 <image-sailfish-opr6.170623.011> 文件夹中带有这些img文件)
将该zip文件再命名为<image-sailfish-opr6.170623.011.zip>复制到父目录即sailfish-opr6.170623.011文件夹下即可
## ubuntu中fastboot权限问题 ##
# adb能够连上设备后
adb reboot bootloader # 使设备进入bootloader模式
fastboot --version # 确保版本号为fastboot version -android,如装有platform-tool则是其他版本的fastboot,此版本可能提示找不到设备/中途报错,waiting for device
sudo ~/Desktop/aosp/aosp800r2/out/host/linux-x86/bin/fastboot --version
> fastboot version -android
# 手机进入bootloader后
sudo ~/Desktop/aosp/aosp800r2/out/host/linux-x86/bin/fastboot devices # 查看设备
# 修改flash-all.sh文件如下,将所有的fastboot指定权限及路径即可
sudo ~/Desktop/aosp/aosp800r2/out/host/linux-x86/bin/fastboot flash bootloader bootloader-sailfish-8996-012001-1706221457.img
sudo ~/Desktop/aosp/aosp800r2/out/host/linux-x86/bin/fastboot reboot-bootloader
sleep 5
sudo ~/Desktop/aosp/aosp800r2/out/host/linux-x86/bin/fastboot flash radio radio-sailfish-8996-013053-1708040002.img
sudo ~/Desktop/aosp/aosp800r2/out/host/linux-x86/bin/fastboot reboot-bootloader
sleep 5
sudo ~/Desktop/aosp/aosp800r2/out/host/linux-x86/bin/fastboot -w update image-sailfish-opr6.170623.011.zip
# 开始刷机
./flash-all.sh
# 修改源码新增文件时,修改/home/adair/Desktop/aosp/aosp800r2/libcore/openjdk_java_files.mk文件,添加新增的文件类名
# 编译时
source build/envsetup.sh
lunch 23 # lunch aosp_sailfish-user: 不带root版本的系统
make update-api
make -j4
# 将aosp源码导入android-studio
# http://wuxiaolong.me/2018/08/15/AOSP3/
#!/bin/sh | |
repo sync -j4 | |
while [ $? -ne 0 ] | |
do | |
repo sync -j4 | |
done |
#!/bin/bash | |
. build/envsetup.sh | |
mmm frameworks/base/packages/SystemUI/ | |
adb start-server | |
adb shell pkill -TERM -f com.android.systemui | |
adb remount | |
adb push $OUT/system/priv-app/SystemUI.apk /system/priv-app/SystemUI.apk | |
adb shell pkill -TERM -f com.android.systemui | |
adb shell chmod 0644 /system/app-priv/SystemUI.apk | |
sleep 2 | |
adb shell am startservice -n com.android.systemui/.SystemUIService | |
Perfect script to custom SystemUI or other android source app, but i have to make some modification to make it work: | |
-pkill not install use this line instead: | |
adb shell ps | grep com.android.systemui | awk '{print $2}' | xargs adb shell kill | |
-chmod incorrect cause loop crash of SystemUI (it has to be executable) | |
adb shell chmod 0755 -R /system/priv-app/SystemUI |