2
InputStreamを使用していても、APKファイルの信頼できる有効なマニフェストコンテンツを取得するにはどうすればよいですか?
バックグラウンド APKファイル(分割APKファイルを含む)に関する情報を取得したいと思っていました(圧縮されていないzipファイル内にある場合でも)。私の場合、これには、パッケージ名、バージョンコード、バージョン名、アプリラベル、アプリアイコン、および分割APKファイルかどうかなど、さまざまなものが含まれます。 PCではなくAndroidアプリ内ですべてを実行したいので、一部のツールが使用できない可能性があることに注意してください。 問題 これは私が使用できないことを意味します getPackageArchiveInfo関数をます。この関数は、APKファイルへのパスを必要とし、非分割APKファイルでのみ機能します。 要するに、それを実行するフレームワーク関数はないため、関数で解析するための入力としてInputStreamを使用して、zipファイルに移動する方法を見つける必要があります。 オンライン以外にもAndroid以外にもさまざまなソリューションがありますが、安定していてすべてのケースで機能するソリューションは知りません。多くはAndroidでも問題ないかもしれませんが(ここの例)、解析に失敗し、Uri / InputStreamではなくファイルパスが必要になる場合があります。 私が見つけたものと試したこと StackOverflowでこれを見つけましたが、残念ながら私のテストによると、常にコンテンツを生成しますが、まれに、有効なXMLコンテンツではない場合があります。 これまでのところ、出力XMLコンテンツが無効であるため、パーサーが解析に失敗するこれらのアプリのパッケージ名とそのバージョンコードを見つけました。 com.farproc.wifi.analyzer 139 com.teslacoilsw.launcherclientproxy 2 com.hotornot.app 3072 android 29(「Androidシステム」システムアプリ自体) com.google.android.videos 41300042 com.facebook.katana 201518851 com.keramidas.TitaniumBackupPro 10 com.google.android.apps.tachyon 2985033 com.google.android.apps.photos 3594753 XMLビューアとXMLバリデータを使用して、これらのアプリの問題を次に示します。 #1、#2については、から始まる非常に奇妙なコンテンツを取得しました<mnfs。 #3の場合、「&」は好きではありません <activity theme="resourceID 0x7f13000b" label="Features & Tests" ... #4は、最後に「マニフェスト」の終了タグを逃しました。 #5の場合、少なくとも「インテントフィルター」、「レシーバー」、「マニフェスト」の複数の終了タグがありませんでした。おそらくもっとある。 #6の場合、何らかの理由で「application」タグで「allowBackup」属性が2回取得されました。 #7の場合、マニフェストタグに属性のない値を取得しました:<manifest versionCode="resourceID 0xa" ="1.3.2"。 #8では、いくつかの「uses-feature」タグを取得した後、多くのコンテンツを逃し、「manifest」の終了タグがありませんでした。 #9の場合、「uses-permission」タグを取得した後、多くのコンテンツが失われ、「manifest」の終了タグがありませんでした …