누락 된 명령 줄 도구를 Android 장치에 어떻게 설치합니까?


9

안드로이드 설치에 유닉스 계열 시스템에서 기대할 수있는 모든 도구가 항상있는 것은 아닙니다.

예를 들어, 현재 findCLI 유틸리티 가없는 문제가있는 장치가 있습니다 . 내 말은, 이것이 내가 얻는 동안 adb shell:

$ find
/system/bin/sh: find: not found

또한:

$ /system/bin/toolbox find
find: no such tool

이 특정 장치는 Android 5.0 (LG가 독점적으로 추가 한 것)을 실행하고 있지만 문제는 모든 Android 버전에 대한 것입니다.

findAndroid에 네이티브 / CLI 도구 (예 : 등 ) 를 설치하는 표준 절차가 있습니까? ( 패키지 관리자? ) 어쨌든 가장 올바른 방법으로 수행하는 방법은 무엇입니까?



예,이 기기는 루팅되었습니다. 그러나 루트가 호환되지 않는 방법에 대해서도 아는 것이 흥미 롭습니다. :)
표시 이름

답변:


5

루팅 된 Android 기기

Stephen의 BusyBox 앱 설치를 고려할 수 있습니다 . Play 스토어 당 앱에서 지원하는 최소 Android 버전은 Android 1.6이며 잘 업데이트 된 앱입니다. 본질적으로 busybox 바이너리를 설치하고 모든 유틸리티의 동일한 디렉토리에 symlink/system/xbin배치 합니다.

BusyBox 란 무엇입니까 (앱 아님)?

BusyBox는 여러 가지 일반적인 UNIX 유틸리티의 작은 버전을 하나의 작은 실행 파일로 결합합니다. 일반적으로 GNU fileutils, shellutils 등에서 찾을 수있는 대부분의 유틸리티를 대체합니다. BusyBox의 유틸리티는 일반적으로 모든 기능을 갖춘 GNU 사촌보다 옵션이 적습니다. 그러나 포함 된 옵션은 예상되는 기능을 제공하며 GNU 대응 기능과 매우 유사하게 작동합니다. BusyBox는 소규모 또는 내장형 시스템을위한 상당히 완벽한 환경을 제공합니다.

여기 에 제공되는 유틸리티의 공식 목록이 있습니다. find도구를 찾을 수 있습니다.

BusyBox 의 유능한 대안 은 Toybox 로 Marshmallow 릴리스의 Toolbox대체 했습니다.

Toybox 란 무엇입니까 ?

Toybox는 많은 공통 Linux 명령 행 유틸리티를 단일 BSD 라이센스 실행 파일로 결합합니다. 간단하고 작으며 빠르며 합리적으로 표준을 준수합니다 ( POSIX-2008LSB 4.1 ).

다음 은 공식 toybox 지원 유틸리티 목록입니다. BusyBox는 현재 Toybox보다 더 많은 도구를 지원하는 것으로 보입니다.

Toybox 바이너리를 설치하는 앱이 존재하지 않는다고 생각하므로 설치 목적으로 여기 에 내 대답을 사용할 수 있습니다 . 참고 대답은 Toybox와 비지 박스 모두의 설치에 사용할 수 있습니다. 전제 조건 만이 공식 소스에서 바이너리를 다운로드하는 것입니다.

공식 다운로드 링크 :

루팅되지 않은 Android 기기

모든 Android 버전에 보편적 인 접근 방식이 있는지 모르겠습니다. 즉, Android 4.0 이상에서는 BusyBox Install (No Root) 이 작동한다고 주장합니다. BusyBox 바이너리와 함께 제공되는 일부 터미널 앱이있을 수 있습니다. 나는 개인적으로 그러한 터미널 응용 프로그램을 테스트하지했지만 그것은 그들의 가장 큰 단점은 이해하기 쉽습니다 : 당신은 사용하여 일부 또는 많은 좋은 사용을 할 수 없습니다 .

그러나 4.2 이상의 안드로이드 버전에서 작동하는 접근법이 있습니다 (내 테스트 기준). 사용자 /data/local/tmp가 편집 할 수있는 디렉토리입니다 shell. adb shell장치에 원격 셸을 부여하고 동일한 사용자로 로그인합니다.

BusyBox / Toybox 바이너리를 넣고 /data/local/tmp동일한 디렉토리에 유틸리티의 심볼릭 링크를 작성하기 만하면됩니다. 이를 위해 다음 단계를 사용할 수 있습니다.

( PC에서 설정이 필요합니다 .)

adb push LOCAL_FILE / data / local / tmp / # LOCAL_FILE을 PC에서 toybox / busybox 바이너리의 파일 경로로 바꿉니다.
adb 쉘
chmod 755 / data / local / tmp / FILE # 푸시 된 이진 파일에 대한 적절한 권한을 설정합니다. FILE을 첫 번째 단계에서 푸시 한 바이너리 이름으로 바꾸십시오. 소문자를 모두 사용하여 한 단어를 이름으로 사용하는 것이 좋습니다.
box = / data / local / tmp / FILE # 다음 단계에서 사용할 로컬 변수 설정. FILE을 적절히 교체하십시오
$ box | $ box sed 's / \ / \ n / g'| $ box sed '$ d'| 줄을 읽는 동안; $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line을 수행하십시오. done # 모든 유틸리티를 나열하기 위해 $ box에 의해 참조 된 바이너리를 실행 한 다음 목록을 생성 한 다음 목록의 각 항목에 대해 디렉토리에 심볼릭 링크를 생성합니다.

Izzy는 BusyBox 바이너리에 대한 심볼릭 링크를 배치 하는 가장 간단한 방법을 권장했습니다 .

adb shell / data / local / tmp / FILE --install -s / data / local / tmp / # FILE을 적절히 바꿉니다. --install -s는 디렉토리에 원하는 심볼릭 링크를 만듭니다. 옆에 디렉토리의 경로가 제공됩니다. 

절대 경로를 사용하여 모든 도구에 액세스 할 수 있습니다 /data/local/tmp/TOOL. TOOL을 유틸리티 이름으로 바꾸십시오. find 명령 호출 사용 예 :

adb shell /data/local/tmp/find --help
adb shell /data/local/tmp/FILE find --help   # alternative way of using a tool

대화식 쉘 세션의 경우 export 명령을 사용하여 FILE의 위치를 ​​$ PATH에 추가 할 수 있습니다.

export PATH = / data / local / tmp : $ PATH # 기존의 $ PATH 값에 / data / local / tmp를 접두사로 사용합니다. export는 하위 쉘이 $ PATH에서 동일한 값을 보게합니다

다음과 같이 find 또는 다른 BusyBox / Toybox 유틸리티를 사용할 수 있습니다.

adb 쉘 
찾기 --help

그것은 것입니다 주목해야 $ PATH의 변경은 현재 쉘 세션에 대해 적용됩니다. 즉, adb를 사용하여 쉘을 시작할 때마다 $ PATH를 내 보내야합니다.

즉, 비 대화식 셸 세션에 대한 Android 전용 솔루션은 Android가 아닌 PC 의 현재 셸 세션 이상으로 존재하고 값이 지속되는 변수를 만드는 방법을 찾는 것 외에는 없습니다 . 예:

adb shell $lolcat   # $lolcat is a temporary variable in my shell on PC and it was assigned the value /system/xbin/toybox. My bash shell is replacing $lolcat with its value and then passing it to adb shell (or you can say, it first expanded the variable and then executed the whole command)

busybox 및 toybox에없는 도구는 누군가가 이미 작성하지 않고 신뢰할 수있는 신뢰할 수있는 위치에 게시 한 경우 다운로드하여 설치할 수있는 경우 Android 용으로 직접 빌드해야합니다.
Firelord
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.