238

インストールされている Android アプリの APK ファイルを root 権限なしで抽出しようとしています。

非システムアプリの APK ファイルはすべて /data/app にあり、このフォルダーにアクセスするには root 権限が必要なため、これは不可能だと思いました。その後、ルート化されていないデバイスでも APK ファイルにアクセスできるように見えるアプリが Google Play ストアに多数あることがわかりました。

誰かがこれがどのように可能か教えてもらえますか? rootなしでAPKファイルをバックアップするバックアップアプリはありませんか?

4

11 に答える 11

452

root 権限がなくても /data/app にアクセスできます。そのディレクトリのパーミッションは rwxrwx--x です。ディレクトリに対する実行権限はアクセスできることを意味しますが、読み取り権限がない場合はその内容のリストを取得できません。したがって、アクセスするには、アクセスするファイルの名前を知っている必要があります。Android のパッケージ マネージャーは、特定のパッケージの保存されている apk の名前を教えてくれます。

コマンド ラインからこれを行うには、 を使用adb shell pm list packagesして、インストールされているパッケージのリストを取得し、目的のパッケージを見つけます。

パッケージ名を使用して、APK の実際のファイル名と場所を取得できますadb shell pm path your-package-name

そして、完全なディレクトリを知っているので、最終的に次を使用してadbをプルできますadb pull full/directory/of/the.apk

Lollipop では、apk パスが次のようになることを指摘してくれた @tarn の功績/data/app/your-package-name-1/base.apk

于 2012-06-13T10:42:13.647 に答える
24

インストール済みアプリのリストを取得するのに ROOT 権限は必要ありません。

Android PackageManager でそれを行うことができます。

以下は小さなコード スニペットです。

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages =  pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Apk file path:" + packageInfo.sourceDir);
}
于 2013-04-22T14:37:41.317 に答える
6

Android 開発用の Eclipse がインストールされている場合:

  • デバイスをデバッグ デバイスとして使用します。携帯電話の場合: [設定] > [アプリケーション] > [開発] で USB デバッグを有効にします。http://developer.android.com/tools/device.html を参照してください
  • Eclipse で、DDMS ウィンドウを開きます: Window > Open Perspective > Other... > DDMS。http://developer.android.com/tools/debugging/ddms.html を参照してください
  • デバイスが表示されない場合は、デバイスの USB ドライバーを (再) インストールしてみてください
  • 中央のペインで [ファイル エクスプローラー] タブを選択し、[システム] > [アプリ] に移動します。
  • 1 つまたは複数のファイルを選択し、上部 (タブの右側) にある [デバイスからファイルをプル] アイコンをクリックします。
  • ターゲット フォルダを選択 - タダ!
于 2012-10-03T12:43:42.653 に答える
0

非ルート デバイスで APK のパッケージ名を取得する方法を見つけました。それほどエレガントではありませんが、常に機能します。

ステップ 1 : デバイスでターゲット APK を開きます

ステップ 2 : PC コマンド ウィンドウで、次のコマンドを入力します。

 adb shell dumpsys activity a > dump.txt

このコマンドの出力は多数あるため、ファイルにリダイレクトすることをお勧めします。

ステップ 3 : この dump.txt ファイルを任意のエディターで開きます。

Android 4.4 より前のデバイスの場合:
ファイルの先頭は次のようになります。

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)  
  Main stack:  
  * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0}  
    numActivities=1 rootWasReset=true userId=0  
    affinity=com.tencent.mm  
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}  
    realActivity=com.tencent.mm/.ui.LauncherUI  
    askedCompatMode=false  
    lastThumbnail=null lastDescription=null  
    lastActiveTime=19915965 (inactive for 10s)  
    * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI}  
        packageName=com.tencent.mm processName=com.tencent.mm 

パッケージ名は 3 行目にあり、この例ではcom.tencent.mmです。

Android 4.4 以降の場合:
dumpsys の出力が少し変更されました。「Stack #1」を検索してみてください。パッケージ名はそのすぐ下にあります。

また、「baseDir」で検索すると、apk ファイルのフル パスが表示されます。

于 2014-10-22T02:17:22.590 に答える
-2

または、 Google Playから「Bluetooth File Transfer」を入手して、ホーム フォルダを に設定します/system/。その後、に行くこともできます/

于 2012-12-01T16:54:56.300 に答える