每次修改完framework或者Service代码,需要重新上传二进制文件到手机并重启。因此编写脚本解决该问题。用法:
① 仅更新Framework文件
upa fwk
② 仅更新Service文件
upa svc
③ 同时更新Framework文件和Service文件
upa all
将以下文件保存为upa.bat并且放到C:\Windows\System32目录下,便可以在任意位置调用。
其中set android_out=Z:需要修改为本地机器中aosp out目录的位置。
@echo off
set android_out=Z:
set return=
rem 更改活动控制台代码页编码
chcp 65001>nul
color 3f
rem ===========================获取设备串号===========================
call :get-device-serial
set deviceId=%return%
if "%deviceId%"=="" (
echo.手机ADB连接失败,请重试!
goto :end
)
rem =============================ROOT设备=============================
call :check-root
set hasRoot=%return%
if "%hasRoot%"=="yes" (
echo.设备ROOT成功!
) else (
echo.设备ROOT失败!
goto :end
)
rem ===========================重新挂载设备============================
call :check-remount
set hasRemount=%return%
if "%hasRemount%"=="yes" (
echo.设备重新挂载成功!
) else (
echo.设备重新挂载失败!
goto :end
)
set argCount=0
for %%x in (%*) do (set /a argCount+=1)
set updateFwk=no
set updateSvc=no
if %argCount% equ 0 (
set updateFwk=yes
set updateSvc=yes
) else (
for %%x in (%*) do (
if "%%x" == "fwk" (
set updateFwk=yes
)
if "%%x" == "svc" (
set updateSvc=yes
)
if "%%x" == "all" (
set updateFwk=yes
set updateSvc=yes
)
)
)
rem ========================上传Framework文件=========================
if "%updateFwk%" == "yes" (
echo.更新Framework文件...
call :upload-framework
echo.更新Framework文件完成!
)
rem ========================上传Services文件=========================
if "%updateSvc%" == "yes" (
echo.更新Service文件...
call :upload-service
echo.更新Service文件完成
)
call :sync-and-start
goto :end
:get-device-serial
rem 提取设备串号,若设备未连接,则提前退出
set deviceId=
for /f "tokens=1,2" %%i in ('adb devices') do (
echo %%j | findstr "device" > nul && (
if %errorlevel% equ 0 (
echo.手机串号提取成功
set deviceId=%%i
)
)
)
set return=%deviceId%
goto :end
:check-root
rem 检测设备是否root
set hasRoot=no
for /f "tokens=*" %%i in ('adb root') do (
echo %%i | findstr "running as root" > nul && (
set hasRoot=yes
)
)
set return=%hasRoot%
goto :end
:check-remount
rem 检测设备根分区是否remount
set hasRemount=no
for /f "tokens=*" %%i in ('adb remount') do (
echo %%i | findstr "remount succeeded" > nul && (
set hasRemount=yes
)
)
set return=%hasRemount%
goto :end
:upload-framework
rem 上传Framework文件到手机设备
set framework_dest=/system/framework
call :upload-file %android_out% %framework_dest% framework.jar
call :upload-file %android_out% %framework_dest% boot-framework.vdex
set framework_arm_dest=/system/framework/arm
call :upload-file %android_out% %framework_arm_dest% boot-framework.art
@REM call :upload-file %android_out% %framework_arm_dest% boot-framework.art.rel
call :upload-file %android_out% %framework_arm_dest% boot-framework.oat
call :upload-file %android_out% %framework_arm_dest% boot.art
@REM call :upload-file %android_out% %framework_arm_dest% boot.art.rel
call :upload-file %android_out% %framework_arm_dest% boot.oat
set framework_arm64_dest=/system/framework/arm64
call :upload-file %android_out% %framework_arm64_dest% boot-framework.art
call :upload-file %android_out% %framework_arm64_dest% boot-framework.art.rel
call :upload-file %android_out% %framework_arm64_dest% boot-framework.oat
call :upload-file %android_out% %framework_arm64_dest% boot.art
@REM call :upload-file %android_out% %framework_arm64_dest% boot.art.rel
call :upload-file %android_out% %framework_arm64_dest% boot.oat
goto :end
:upload-service
rem 上传Service文件到手机设备
set framework_dest=/system/framework
call :upload-file %android_out% %framework_dest% services.jar
@REM call :upload-file %android_out% %framework_dest% services.core.jar
set framework_oat_arm64_dest=/system/framework/oat/arm64
call :upload-file %android_out% %framework_oat_arm64_dest% services.art
call :upload-file %android_out% %framework_oat_arm64_dest% services.vdex
call :upload-file %android_out% %framework_oat_arm64_dest% services.odex
@REM call :upload-file %android_out% %framework_oat_arm64_dest% services.core.vdex
@REM call :upload-file %android_out% %framework_oat_arm64_dest% services.core.odex
@REM set framework_oat_arm_dest=/system/framework/oat/arm
@REM call :upload-file %android_out% %framework_oat_arm_dest% services.core.vdex
@REM call :upload-file %android_out% %framework_oat_arm_dest% services.core.odex
goto :end
:sync-and-start
adb shell sync
adb shell stop
adb shell start
goto :end
:upload-file
set aospOutLoc=%1
set fileDir=%2
set fileName=%3
set srcFile=%aospOutLoc%/%fileDir%/%fileName%
set destFile=%fileDir%/%fileName%
if exist %srcFile% (
echo.拷贝文件%srcFile%到%destFile%
for /f "tokens=*" %%i in ('adb push %srcFile% %destFile%') do (
echo.输出结果:%%i
echo %%i | findstr "file pushed" > nul && (
echo -e "文件%srcFile%推送成功!"
)
)
) else (
echo.源文件%srcFile%不存在,请确认!
)
echo.----------------------------------
goto :end
:end