国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

禁用adb install 安裝app功能

這篇具有很好參考價值的文章主要介紹了禁用adb install 安裝app功能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.前言

在android 的產(chǎn)品開發(fā)只中,在進行一些定制開發(fā)中,對于一些apo需要通過屬性來控制禁上安裝,adb nstl也不分許安裝,所以就典熟悉adb install的安裝流程,然后來禁用adb install安裝功能,接下來分析下adb 下的安裝流程

2.禁用adb install 安裝app功能的核心類

system\core\adb\daemon\abb.cpp
system\core\adb\daemon\shell_service.cpp

3.禁用adb install 安裝app功能的核心功能分析和實現(xiàn)

在android 的產(chǎn)品中,在通過adb install 進入 adb install安裝模式后正??梢赃M行安裝app的相關(guān)操作,而adb 是pc端工具,adbd是服務(wù)端Q,運行在手機 adbd 讀取 socket 解析由 adb 傳過來的命令串,解析相關(guān)的命令執(zhí)行相關(guān)功能,所以在pc端輸入adb 相關(guān)命令就會在systemlcoreladb 模塊解析相關(guān)命令所以說在abb.cpp中來作為服務(wù)端來執(zhí)行相關(guān)功能

3.1abb.cpp相關(guān)源碼分析

在system中的adb install 安裝apk的時候會有下面的log,有install字樣。會調(diào)用StartCommandlnProcess和execCmd執(zhí)行命令abb.cpp里面的bin程序一直在讀命令ReadProtocolString,abb這個程序開機就在后臺運行

 
  std::vector<std::string_view> parseCmdArgs(std::string_view args) {
      std::vector<std::string_view> argv;
  
      char delim = ABB_ARG_DELIMETER;
      size_t size = args.size();
      size_t base = 0;
      while (base < size) {
          size_t found;
          for (found = base; found < size && args[found] && args[found] != delim; ++found)
              ;
          if (found > base) {
              argv.emplace_back(args.substr(base, found - base));
          }
          base = found + 1;
      }
  
      return argv;
  }
  
  }  // namespace
  
  static int execCmd(std::string_view args, int in, int out, int err) {
      AdbFdTextOutput oin(out);
      AdbFdTextOutput oerr(err);
      return cmdMain(parseCmdArgs(args), oin, oerr, in, out, err, RunMode::kLibrary);
  }
int main(int argc, char* const argv[]) {
    signal(SIGPIPE, SIG_IGN);
 
    int fd = STDIN_FILENO;
    std::string data;
    while (true) {
        std::string error;
        if (!ReadProtocolString(fd, &data, &error)) {
            PLOG(ERROR) << "Failed to read message: " << error;
            break;
        }
 
        std::string_view name = data;
        auto protocol = SubprocessProtocol::kShell;
        if (android::base::ConsumePrefix(&name, "abb:")) {
            protocol = SubprocessProtocol::kShell;
        } else if (android::base::ConsumePrefix(&name, "abb_exec:")) {
            protocol = SubprocessProtocol::kNone;
        } else {
            LOG(FATAL) << "Unknown command prefix for abb: " << data;
        }
 
        unique_fd result = StartCommandInProcess(std::string(name), &execCmd, protocol);
        int max_buf = LINUX_MAX_SOCKET_SIZE;
        adb_setsockopt(result, SOL_SOCKET, SO_SNDBUF, &max_buf, sizeof(max_buf));
        if (android::base::SendFileDescriptors(fd, "", 1, result.get()) != 1) {
            PLOG(ERROR) << "Failed to send an inprocess fd for command: " << data;
            break;
        }
    }
}

從abb.cpp的上述的相關(guān)的源碼中,可以知道abb.cpp里面的bin程席一直在讀命令ReadProtocolStringabb這個程序開機就在后臺運行,可以接收pc端的相關(guān)命令,在parseCmdArgs(std:string view args )中解析從adb的命令中解析命令
接下來分析下shell service.cpp中的
StartCommandInProcess相關(guān)命會分析

3.2 shell service.cpp的相關(guān)源碼分析

在system/core/adb的模塊中,在通過上述的分析得知,在這個shell service.cpp中負(fù)責(zé)在接收c端adb的相關(guān)命令中,負(fù)責(zé)解析,首先在StartCommand nProcess/std.sting name. Command command SubprocessProtocol prtoco 中fadb insta開t裝app的相關(guān)
功能的實現(xiàn)

 
  unique_fd StartSubprocess(std::string name, const char* terminal_type, SubprocessType type,
                            SubprocessProtocol protocol, bool make_pty_raw,
                            SubprocessProtocol error_protocol, unique_fd* error_fd) {
      D("starting %s subprocess (protocol=%s, TERM=%s): '%s'",
        type == SubprocessType::kRaw ? "raw" : "PTY",
        protocol == SubprocessProtocol::kNone ? "none" : "shell", terminal_type, name.c_str());
  
      auto subprocess = std::make_unique<Subprocess>(std::move(name), terminal_type, type, protocol,
                                                     make_pty_raw);
      if (!subprocess) {
          LOG(ERROR) << "failed to allocate new subprocess";
          *error_fd = ReportError(error_protocol, "failed to allocate new subprocess");
          return {};
      }
  
      std::string error;
      if (!subprocess->ForkAndExec(&error)) {
          LOG(ERROR) << "failed to start subprocess: " << error;
          *error_fd = ReportError(error_protocol, error);
          return {};
      }
  
      unique_fd local_socket(subprocess->ReleaseLocalSocket());
      D("subprocess creation successful: local_socket_fd=%d, pid=%d", local_socket.get(),
        subprocess->pid());
  
      if (!Subprocess::StartThread(std::move(subprocess), &error)) {
          LOG(ERROR) << "failed to start subprocess management thread: " << error;
          *error_fd = ReportError(error_protocol, error);
          return {};
      }
  
      return local_socket;
  }
//add core start
#include <stdio.h>
bool isAllowInstall() {
	std::string value = android::base::GetProperty("persist.sys.isallow", "true");
	if (strcmp("true", value.c_str()) == 0)
      return true;
	else
	  return false;	
}
//add core end
 
unique_fd StartCommandInProcess(std::string name, Command command, SubprocessProtocol protocol) {
    LOG(INFO) << "StartCommandInProcess(" << dump_hex(name.data(), name.size()) << ")";
 
//add core start
	std::string namestring = dump_hex(name.data(), name.size());
	std::string install_flag="package.install";
	std::string::size_type idx=namestring.find(install_flag);
//add core end
 
    constexpr auto terminal_type = "";
    constexpr auto type = SubprocessType::kRaw;
    constexpr auto make_pty_raw = false;
 
    auto subprocess = std::make_unique<Subprocess>(std::move(name), terminal_type, type, protocol,
                                                   make_pty_raw);
//add core start
	if(idx == std::string::npos ){
	     LOG(ERROR) << "the command do not include package.install string";
	}else{
	  if(!isAllowInstall()) {
	     LOG(ERROR) << "can not allow to install app" ;
	     return ReportError(protocol, "can not allow to install app by adb install command");
	  }else 
	     LOG(ERROR) << "Allow to install app";
	}
//add core end
 
											   
    if (!subprocess) {
        LOG(ERROR) << "failed to allocate new subprocess";
        return ReportError(protocol, "failed to allocate new subprocess");
    }
 
    std::string error;
    if (!subprocess->ExecInProcess(std::move(command), &error)) {
        LOG(ERROR) << "failed to start subprocess: " << error;
        return ReportError(protocol, error);
    }
 
    unique_fd local_socket(subprocess->ReleaseLocalSocket());
    D("inprocess creation successful: local_socket_fd=%d, pid=%d", local_socket.get(),
      subprocess->pid());
 
    if (!Subprocess::StartThread(std::move(subprocess), &error)) {
        LOG(ERROR) << "failed to start inprocess management thread: " << error;
        return ReportError(protocol, error);
    }
 
    return local_socket;
}

在上述的shell service.cpp的相關(guān)源碼中分析得知,在通過判斷dump hex(name.data(),name.size()中是否有package.install字符來判斷是否執(zhí)行adb install安裝app的命令,然后在通過調(diào)用isAllowInstal()來判斷系統(tǒng)屬性persist.sys.isallow是否允許安裝app,當(dāng)為false就表示禁止安裝第=方app,這時候就返回ReportError(protocol,“can not allow to install app by adb install command”).就實現(xiàn)禁止通過adb install來安裝第三方app功能文章來源地址http://www.zghlxwxcb.cn/news/detail-729175.html

到了這里,關(guān)于禁用adb install 安裝app功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 完美解決Android adb install 安裝提示 INSTALL_FAILED_TEST_ONLY

    完美解決Android adb install 安裝提示 INSTALL_FAILED_TEST_ONLY

    目錄 所遇問題 有些時候我們用命令進行安裝apk如下: 但是會安裝不成功,報如下錯誤: 錯誤現(xiàn)象:提示:Failed to install app-debug.apk: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI] 那么我們究竟應(yīng)該怎么解決呢? 解決思路 查閱Android相關(guān)文檔,并打印相關(guān)adb 命令幫助,如下圖,進過

    2024年02月04日
    瀏覽(34)
  • 【Android】adb安裝錯誤:INSTALL_FAILED_UPDATE_INCOMPATIBLE可嘗試的解決方法

    1、問題描述 最近打包在測試機上安裝應(yīng)用遇到了這樣的錯誤: 網(wǎng)上的說法是因為包體簽名有修改過,舊包雖然卸載了,但還有信息殘留在手機里。我回想一下好像確實干過更換包體簽名這個事。 2、解決方法 在出現(xiàn)安裝錯誤的測試機上通過adb命令卸載包名對應(yīng)包體,即便你

    2024年02月11日
    瀏覽(25)
  • android@adb連接電腦和android設(shè)備@安裝和卸載@清除app數(shù)據(jù)

    Android 調(diào)試橋 (adb) | Android 開發(fā)者 | Android Developers android設(shè)備端設(shè)置和準(zhǔn)備 USB選項: 選擇 文件傳輸 而不是僅充電(只會導(dǎo)致文件傳輸?shù)裙δ軣o法生效) 典型錯誤: more than one device/emulator 打開 開發(fā)者選項 (developerOptions) 啟用USB調(diào)試(USB debugging) Switche to debugging mode when USB is connected 允

    2024年02月04日
    瀏覽(51)
  • 【Android Studio】安裝app報錯Installation did not succeed. The application could not be installed: INSTALL

    【Android Studio】安裝app報錯Installation did not succeed. The application could not be installed: INSTALL

    安裝app demo報錯;app安裝不上 Installation did not succeed. The application could not be installed: INSTALL_FAILED_INSUFFICIENT_STORAGE The device needs more free storage to install the application (extra space is needed in addition to APK size). 程序或手機內(nèi)存空間不足 清理程序內(nèi)存:Build - Clean Project 清理手機內(nèi)存:清理多

    2024年02月07日
    瀏覽(28)
  • Android DownloadManager 下載安裝App功能實現(xiàn)

    Android DownloadManager 下載安裝App功能實現(xiàn)

    @[DownlaodManager 實戰(zhàn)] 升級功能是APP必備功能,本文以下載安裝APP的完整流程來說明 DownlaodManager 的基本使用方法。 下載需要互聯(lián)網(wǎng)權(quán)限,需要申請 uses-permission android:name=\\\"android.permission.INTERNET\\\" / 權(quán)限; 安裝APP,需要申請 uses-permission android:name=\\\"android.permission.REQUEST_INSTALL_PACKAGE

    2024年02月02日
    瀏覽(19)
  • 【Android】通過命令行adb install 將apk下載到手機之中

    【Android】通過命令行adb install 將apk下載到手機之中

    mac 電腦中有一個apk,想將該apk下載install到Android手機中。 首先在手機中刪除原有的apk,然后再連上數(shù)據(jù)線到電腦中(我是在Android studio的命令行)進行如下的命令行: 路徑按照實際的輸入即可

    2024年02月11日
    瀏覽(22)
  • Android 13.0 開啟禁用系統(tǒng)接收短信功能

    ?在13.0的系統(tǒng)rom定制化中,在一些wifi產(chǎn)品的機器中,對于系統(tǒng)4g部分的功能需要裁剪 比如撥打電話 接聽電話 短信功能等這部分 需要禁用系統(tǒng)對應(yīng)的功能,接下來就來初步分析下系統(tǒng)中接收短信部分功能,然后實現(xiàn)禁用接收短信功能 對于Mms應(yīng)用程序來講主要就是在信息數(shù)據(jù)

    2024年02月22日
    瀏覽(30)
  • Android 12.0 禁用和啟用撥打電話功能實現(xiàn)

    ?在12.0的產(chǎn)品定制化開發(fā)中,在一些wifi產(chǎn)品的產(chǎn)品開發(fā)中,對于系統(tǒng)4g部分的功能需要裁剪 比如撥打電話 接聽電話 短信功能等這部分 需要禁用系統(tǒng)對應(yīng)的功能,接下來就來初步分析下系統(tǒng)中撥打電話部分功能,然后實現(xiàn)禁用撥打電話功能 在系統(tǒng)中TelecomManager 主要是提供有

    2024年02月09日
    瀏覽(20)
  • android app代碼中執(zhí)行adb指令

    方案1:使用Runtime類 方案二、

    2024年02月12日
    瀏覽(18)
  • Android adb命令 關(guān)閉app 和 啟動app 還有重啟app命令

    以下是Android中使用adb命令關(guān)閉應(yīng)用程序、啟動應(yīng)用程序和重啟應(yīng)用程序的方法: 1.關(guān)閉應(yīng)用程序 使用以下命令可以關(guān)閉正在運行的應(yīng)用程序: 其中,package_name是您要關(guān)閉的應(yīng)用程序的包名。例如,要關(guān)閉Google Chrome應(yīng)用程序,您可以使用以下命令: 2.啟動應(yīng)用程序 使用以下

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包