android下載安裝apk,android編譯 預裝apk,Android系統使用Shell腳本預裝apk

 2023-10-24 阅读 31 评论 0

摘要:客戶需求:需要在Android系統預安裝一個或者若干個apk,客戶可以選擇自行卸載并且卸載后系統再次啟動并不會再次自動安裝。考慮到需要批量安裝應用,我這里考慮到使用靈活的shell腳本。shell腳本可以通過修改init.rc令其可以在開機時運行啟動,同時可

客戶需求:需要在Android系統預安裝一個或者若干個apk,客戶可以選擇自行卸載并且卸載后系統再次啟動并不會再次自動安裝。

考慮到需要批量安裝應用,我這里考慮到使用靈活的shell腳本。shell腳本可以通過修改init.rc令其可以在開機時運行啟動,同時可以加入限制相應的判斷條件讓其在首次只run一次,這里命名shell腳本為install_apk.sh。以下是init.rc的配置啟動服務,通過添加如下聲明可以讓Android系統在啟動時運行install_apk.sh#install apk

android下載安裝apk,service install_apk /system/bin/install_apk.sh

class main

oneshot

安卓編譯打包?接下來我們來看install_apk.sh的實現,這里設計shell腳本的功能主要是實現安裝指定目錄下的apk,并且只運行一次,我們直接看腳本代碼。#!/system/bin/sh

installed_mode=`/system/bin/getprop "persist.sys.apk.installed"`

if [ "$installed_mode" != "DONE" ]; then

編寫apk。DIR="/system/usr/app"

DATA_DIR="/data/app"

cd $DIR

安卓shell工具。for apk in $(ls $DIR)

do

busybox cp $DIR/$apk $DATA_DIR

chmod 777 $DATA_DIR/$apk

done

fi

/system/bin/setprop persist.sys.apk.installed DONE

腳本的功能是劃分以下兩個部分

1、查詢/system/usr/app下的全部apk,通過copy到/data/app和修改其權限實現apk的安裝,

2、通過系統屬性persist.sys.apk.installed賦值給installed_mode變量,判斷應用是否已經安裝運行

這里可以查詢關于shell腳本的for使用方法進行優化,避免重復操作,之前少量apk的時候我是這樣寫的,如下busybox cp /system/usr/app/OfficeSuite.apk data/app

busybox cp /system/usr/app/ES.apk data/app

chmod 777 data/app/OfficeSuite.apk

chmod 777 data/app/ES.apk

如果預裝的apk多起來就很麻煩,你需要反復地修改你的腳本,真的是不堪其擾,因此使用for來處理。

當然在此之前,你還需要做的是把相關的apk在系統編譯時拷貝到/system/usr/app目錄下,常規做法是使用在device.mk文件中使用PRODUCT_COPY_FILES拷貝,但是考慮有可能會有很多個apk,我遇到有的客戶需要預裝10個應用,所以還是采取一勞永逸的辦法,批量拷貝,在對應的產品目錄下新建一個目錄,我這里命名為preinstallApk,將相關的apk拷貝到該目錄下,具體mk實現如下。define all-data-files-under

$(patsubst ./%,%, \

$(shell cd $(LOCAL_PATH)/$(1) ; \

find ./ -maxdepth 1? -name "*.apk" -and -not -name ".*") \

)

endef

COPY_APK_TARGET := $(call all-data-files-under,preinstallApk)

PRODUCT_COPY_FILES += $(foreach apkName, $(COPY_APK_TARGET), \

$(addprefix $(LOCAL_PATH)/preinstallApk/, $(apkName)):$(addprefix system/usr/app/, $(apkName)))

同理,shell腳本也是可以通過PRODUCT_COPY_FILES操作拷貝進系統,你可以選擇在device.mk或者preinstall.mk目錄添加以下定義PRODUCT_COPY_FILES += \

$(LOCAL_PATH)/install_apk.sh:system/bin/install_apk.sh

至此,Android預裝apk可以完成了。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/163430.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息