PHP ページによって出力される Android APK ファイルをダウンロードしようとしています。ダウンロードは成功ですが、apkファイルをインストールしようとすると、パッケージの解析に問題が発生します。実際には、ファイルパス(/var/www/xxx/HelloWorldTest.apk)に直接アクセスし、このメソッドは完全にインストールされました (問題ありません)。しかし、php ソース経由のメソッドを使用したい。
サーバーに Android アプリがあり、次のような php コードもあります。
<?php
$path = "/var/www/xxx/";
$filename="HelloWorldTest.apk";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/vnd.android.package-archive");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($path . $filename));
readfile($path . $filename);
?>
次のような HelloWorldTest(Android アプリ) マニフェストを用意します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.helloworldtest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.helloworldtest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
私のセットアップ:CentOSリリース6.3(最終)、2.6.32-279.5.2.el6.x86_64、PHP 5.3.17 Androidテーブルバージョン:3.2.1カーネルバージョン:2.6.36.3
ダイレクトアクセス方式の場合とphp方式の結果の場合ではバイナリダンプの違いがあります。
直接アクセス(成功)
50 4B 03 04 14 00 08 08 08 00 F5 91 76 42 00 00
00 00 00 00 00 00 00 00 00 00 1C 00 04 00 72 65
73 2F 6C 61 79 6F 75 74 2F 61 63 74 69 76 69 74
79 5F 6D 61 69 6E 2E 78 6D 6C FE CA 00 00 6D 91
...
php経由(インストール失敗)
0A 0A 50 4B 03 04 14 00 08 08 08 00 F5 91 76 42
00 00 00 00 00 00 00 00 00 00 00 00 1C 00 04 00
72 65 73 2F 6C 61 79 6F 75 74 2F 61 63 74 69 76
69 74 79 5F 6D 61 69 6E 2E 78 6D 6C FE CA 00 00
.....
問題は、バイナリコードで最初の部分 [0A 0A] が追加されたようです。