QQ는 직접 전송하는 전송 응용 기능으로 이미 설치된 설치 패키지를 어떻게 찾습니까?

1977 단어
블로그 원문: [10월의 호기심] QQ가 얼굴을 맞대고 빠르게 전송하는 전송 응용 기능은 어떻게 실현되었습니까?
휴대전화에서 우리는 일반적으로 이미 설치된 앱의 패키지를 볼 수 없지만, 때때로 우리는 재미있는 앱이나 게임을 친구에게 공유할 수도 있다.인터넷이 없는 상태에서는 어떻게 하죠?
어떤 친구가 QQ의 대면 스피드 전송을 발견하면 설치된 앱의 apk를 직접 보낼 수 있다.놀란 얼굴.내 인상에서 안드로이드 응용 프로그램은 윈도우즈 소프트웨어의 설치 패키지와 같이 일련의 파일 압축 집합이기 때문이다.실제로 설치할 때 각 파일을 압축하여 다른 디렉터리에 설치합니다.설마 QQ가 핸드폰에서 또 각 부분을 모아서 다시 포장했을까?
그래서 나는 안드로이드 응용 프로그램의 설치 과정을 알아보았는데 문제가 생각보다 그렇게 복잡하지 않다는 것을 발견했다.apk의 설치 과정에 관해서 나는 메모를 위해 글을 한 편 썼다.당신도 궁금하면 간단하게 보셔도 됩니다.Apk 설치 프로세스
간단하게 말하면 많은 내용을 풀었지만/data/app/상응하는 디렉터리에 완전한 apk를 남겼다.QQ가 하는 일은 이 파일을 찾아서 일반적인 파일로 공유하는 것이다.
그렇다면,
어떻게 대응하는 apk를 찾습니까?PackageManager는 시스템 설치 응용 프로그램의 목록을 제공했는데 이 목록은 매우 많은 가치 있는 정보를 제공했다ApplicationInfo.
그중의 sourceDir 필드가 우리의 목표임을 발견할 수 있다.
OK, 이 두 줄 코드를 통해 apk 파일의 경로를 얻을 수 있습니다.신나지 않았어요?
    //          
    List apps = {Activity}.getPackageManager().getInstalledApplications(0);

    //   apk  
    appInfo.sourceDir


권한 문제
앞에서 apk가 /data/app/ 디렉터리에 저장되어 있다고 말한 것을 보았는데 사실 권한 문제가 매우 걱정된다.우리는 /data/ 디렉터리 권한이 매우 엄격하다는 것을 알고 시스템 사용자나 같은 그룹의 사용자가 있어야만 읽기 권한을 가진다.
drwxrwx--x 44 system system 4096 2018-10-08 16:17 data/

그러나 걱정하지 마십시오. 검증을 통해 /data//data/app/의other 사용자는 읽을 권한이 없지만 그 아래의 파일은other가 읽을 수 있습니다.
ocean:/ $ ls -ld data/app/com.qiyi.video 
drwxr-xr-x 4 system system 4096 1970-01-01 08:03 data/app/com.qiyi.video

ocean:/ $ ls -l data/app/com.qiyi.video
-rw-r--r-- 1 system system  31639584 1970-01-01 08:03 com.qiyi.video.apk
drwxr-xr-x 3 system system      4096 1970-01-01 08:03 lib
drwxrwx--x 3 system install     4096 1970-01-01 08:03 oat

신기하지 않아요?
이제 이 세상의 문도 너를 위해 열렸으니 어서 탐색해 보아라.

좋은 웹페이지 즐겨찾기