実際には、aapt
これをランダムに不可能にするバグがあります。それが機能するはずの方法は、他の回答が主張するとおりです。パスを渡さない限り、パスは保持されます-k
。これがどのように実装されているか見てみましょう:
パスを無視するかどうかを制御するフラグは次のmJunkPath
とおりです。
bool mJunkPath;
この変数は というクラスBundle
にあり、次の 2 つのアクセサによって制御されます。
bool getJunkPath(void) const { return mJunkPath; }
void setJunkPath(bool val) { mJunkPath = val; }
-k
コマンドラインで指定されたユーザーの場合、次のように設定されtrue
ます。
case 'k':
bundle.setJunkPath(true);
break;
また、データがファイルに追加されるときに、次のようにチェックされます。
if (bundle->getJunkPath()) {
String8 storageName = String8(fileName).getPathLeaf();
printf(" '%s' as '%s'...\n", fileName, storageName.string());
result = zip->add(fileName, storageName.string(),
bundle->getCompressionMethod(), NULL);
} else {
printf(" '%s'...\n", fileName);
result = zip->add(fileName, bundle->getCompressionMethod(), NULL);
}
残念ながら、アプリケーションによって使用される の 1 つのインスタンスがスタックにBundle
割り当てられ、コンストラクターで の初期化がないため、変数の値はランダムです。に明示的に設定する方法がないと、私のシステムでは (一見決定論的に) 指定されたパスにファイルを追加できません。main
mJunkPath
false
ただし、zip
APK は単純な Zip ファイルであり、zip
ツールは正常に動作するため、そのまま使用することもできます。
(記録として、私はまだ Android へのパッチとしてこれに対する些細な修正を提出していません。他の誰かが望むなら、おそらくより良い場所になるでしょう。Android コードの提出プロセスに関する私の経験は、我慢する必要がありました信じられないほど複雑な提出メカニズムで、最終的に誰かが私に返信するまでに 6 か月かかりました。この問題の回避策ですが、私はそのすべてを再び気にするほど重要だとは考えていません。)