天天看點

Android go app 安裝包,android - 如何從android studio開發時在system / app中安裝應用程式...

在android studio上開發時,是否有一種方法可以讓應用程式直接安裝在system/app檔案夾中(該裝置是根目錄)?

也就是說,當我按下“運作應用程式”按鈕時,我希望将APK放在系統/應用程式中。

如果這是不可能的,那麼在建構和測試系統應用程式時,推薦的最友善的方法是什麼?

最佳答案:

從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。在運作時将其綁定

轉到運作->編輯配置

在(子產品的)正常頁籤上執行以下更改

安裝選項->取消顯示:無

啟動選項->啟動:無

啟動前:按+,然後按Run External Tool,選擇腳本。

在“建立”對話框中:

設定任何名稱。

在“工具設定”->程式上:導航到項目的目錄,然後選擇腳本

注意事項:

第一次安裝

第一次安裝應用程式時,隻需重新啟動一次裝置(adb reboot)。然後,隻需按Run即可自動執行所有操作。

這是因為主機編譯器(dex2oat)不會自動調用。不知怎麼的,這個新系統應用程式還沒有通知作業系統。手動打電話給dex2oat應該可以解決這個問題,但我運氣不好。如果有人解決了,請分享。

adb root問題

有時(通常是重新啟動後的初始執行),對adb root的調用找不到裝置。成功後,您隻需從AStudio或sleep重新播放一秒鐘即可。

使用adb root而不是su

adb root将不會工作,盡管安裝系統和授予權限。要使其正常工作,請将腳本的adb push變量和install部分替換為以下内容:

..

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