热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何从androidstudio开发时在system/app中安装应用程序

如何解决《如何从androidstudio开发时在system/app中安装应用程序》经验,为你挑选了2个好方法。

有没有办法在Android Studio上开发时直接在system/app文件夹中安装应用程序(设备已植根)?

这意味着,当我按下"运行应用程序"按钮时,我希望将apk放在系统/应用程序中.

如果无法做到这一点,建议最方便的方法是构建和测试系统应用程序?



1> Paschalis..:
从AS自动部署系统应用程序

您可以创建一个可以完成工作的脚本,并在每次在AS中运行时自动运行它.

1.创建脚本

您可以根据我的需要调整我创建的脚本.将其放在:project_directory/installSystem.sh中

#!/bin/bash

# CHANGE THESE FOR YOUR APP
app_package="com.example"
dir_app_name="MySysApp"
MAIN_ACTIVITY="SysAppMainActivity"

ADB="adb" # how you execute adb
ADB_SH="$ADB shell" # this script assumes using `adb root`. for `adb su` see `Caveats`

path_sysapp="/system/priv-app" # assuming the app is priviledged
apk_host="./app/build/outputs/apk/app-debug.apk"
apk_name=$dir_app_name".apk"
apk_target_dir="$path_sysapp/$dir_app_name"
apk_target_sys="$apk_target_dir/$apk_name"

# Delete previous APK
rm -f $apk_host

# Compile the APK: you can adapt this for production build, flavors, etc.
./gradlew assembleDebug || exit -1 # exit on failure

# Install APK: using adb root
$ADB root 2> /dev/null
$ADB remount # mount system
$ADB push $apk_host $apk_target_sys

# Give permissions
$ADB_SH "chmod 755 $apk_target_dir"
$ADB_SH "chmod 644 $apk_target_sys"

#Unmount system
$ADB_SH "mount -o remount,ro /"

# Stop the app
$ADB shell "am force-stop $app_package"

# Re execute the app
$ADB shell "am start -n \"$app_package/$app_package.$MAIN_ACTIVITY\" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER"

2.用AS Run绑定它

    转到"运行" - >"编辑配置"

    在" 常规"选项卡(模块的)上执行以下更改

    安装选项 - > Deplay: Nothing

    启动选项 - >启动:没有

    发布之前:+,然后Run External Tool选择您的脚本.

    在新对话框中:

    设置任何名称.

    在"工具设置" - >程序:导航到项目的目录,然后选择您的脚本

警告:

首次安装

在第一次安装应用程序时,设备只需重启(adb reboot)一次.之后,您只需按下即可Run自动完成所有操作.

这是因为主机编译器(dex2oat)不会自动调用.不知何故操作系统尚未获知这个新的系统应用程序.手动调用dex2oat应该可以解决这个问题,但我没有运气.如果有人解决它,请分享.

adb root 问题

有时(通常是重启后的初始执行)调用adb root找不到设备.您可以简单地重新播放AStudio,或者sleep在成功后重播一秒钟adb root.

使用su而不是adb root

adb push尽管安装了系统并给予了许可,但它不会工作.要使其工作ADB_SH,请使用以下内容替换脚本的变量和安装部分:

..
ADB_SH="$ADB shell su -c"
..
# Install APK: using adb su
$ADB_SH "mount -o rw,remount /system"
$ADB_SH "chmod 777 /system/lib/"
$ADB_SH "mkdir -p /sdcard/tmp" 2> /dev/null
$ADB_SH "mkdir -p $apk_target_dir" 2> /dev/null
$ADB push $apk_host /sdcard/tmp/$apk_name 2> /dev/null
$ADB_SH "mv /sdcard/tmp/$apk_name $apk_target_sys"
$ADB_SH "rmdir /sdcard/tmp" 2> /dev/null


这太棒了!虽然我做了一个小改动,从Android 4.3+开始,路径不是`/ system/app`它应该是`/ system/priv-app`,谢谢你,它帮助我实现了自动化构建过程.
@Paschalis我试过这个,但它给出了错误= 13(权限被拒绝).你知道怎么回事吗?谢谢

2> Birdnado..:

Windows脚本供那些感兴趣的人使用:

以相同方式存储此文件:在项目目录的根目录(installSysPrivApp.bat)

::WIN BATCH SCRIPT

:: CHANGE THESE
set app_package=com.example.package
set dir_app_name=app
set MAIN_ACTIVITY=MainActivity

set ADB="adb"
::ADB_SH="%ADB% shell" # this script assumes using `adb root`. for `adb su` 
see `Caveats`

set path_sysapp=/system/priv-app
set apk_host=.\Application\build\outputs\apk\Application-debug.apk
set apk_name=%dir_app_name%.apk
set apk_target_dir=%path_sysapp%/%dir_app_name%
set apk_target_sys=%apk_target_dir%/%apk_name%

:: Delete previous APK
del %apk_host%

:: Compile the APK: you can adapt this for production build, flavors, etc.
call gradlew assembleDebug

set ADB_SH=%ADB% shell su -c

:: Install APK: using adb su
%ADB_SH% mount -o rw,remount /system
%ADB_SH% chmod 777 /system/lib/
%ADB_SH% mkdir -p /sdcard/tmp
%ADB_SH% mkdir -p %apk_target_dir%
%ADB% push %apk_host% /sdcard/tmp/%apk_name% 
%ADB_SH% mv /sdcard/tmp/%apk_name% %apk_target_sys%
%ADB_SH% rmdir /sdcard/tmp

:: Give permissions
%ADB_SH% chmod 755 %apk_target_dir%
%ADB_SH% chmod 644 %apk_target_sys%

::Unmount system
%ADB_SH% mount -o remount,ro /

:: Stop the app
%ADB% shell am force-stop %app_package%

:: Re execute the app
%ADB% shell am start -n \"%app_package%/%app_package%.%MAIN_ACTIVITY%\" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER


推荐阅读
author-avatar
我叫博小微
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有