Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试安装未签名的远程.apk文件时出现不一致的分析错误_Java_Android_Android Asynctask_Apk - Fatal编程技术网

Java 尝试安装未签名的远程.apk文件时出现不一致的分析错误

Java 尝试安装未签名的远程.apk文件时出现不一致的分析错误,java,android,android-asynctask,apk,Java,Android,Android Asynctask,Apk,我目前正在开发一个应用程序,该应用程序不会在play store上运行,需要一些更新例程 我让它工作,所以当用户按下一个按钮,应用程序下载一个apk文件托管在我们的服务器之一。那部分很好用。这里有一些有趣的东西 当我尝试启动安装该文件的意图时,出现以下解析错误: “分析错误分析包时出现问题” 无论在android版本4.0.3上发生什么,每次都会发生此错误。以下是日志: 10-03 18:36:05.212: D/asset(567): failed to open Zip archive

我目前正在开发一个应用程序,该应用程序不会在play store上运行,需要一些更新例程

我让它工作,所以当用户按下一个按钮,应用程序下载一个apk文件托管在我们的服务器之一。那部分很好用。这里有一些有趣的东西

当我尝试启动安装该文件的意图时,出现以下解析错误:

“分析错误分析包时出现问题”

无论在android版本4.0.3上发生什么,每次都会发生此错误。以下是日志:

10-03 18:36:05.212: D/asset(567): failed to open Zip archive            '/mnt/sdcard/download/AMWireless.apk'
10-03 18:36:05.272: W/PackageParser(567): Unable to read AndroidManifest.xml of     /mnt/sdcard/download/AMWireless.apk
10-03 18:36:05.272: W/PackageParser(567): java.io.FileNotFoundException:  AndroidManifest.xml
10-03 18:36:05.272: W/PackageParser(567):   at android.content.res.AssetManager.openXmlAssetNative(Native Method)
10-03 18:36:05.272: W/PackageParser(567):   at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:487)
10-03 18:36:05.272: W/PackageParser(567):   at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:455)
10-03 18:36:05.272: W/PackageParser(567):   at android.content.pm.PackageParser.parsePackage(PackageParser.java:425)
10-03 18:36:05.272: W/PackageParser(567):   at com.android.packageinstaller.PackageUtil.getPackageInfo(PackageUtil.java:74)
10-03 18:36:05.272: W/PackageParser(567):   at com.android.packageinstaller.PackageInstallerActivity.onCreate(PackageInstallerActivity.java:277)
10-03 18:36:05.272: W/PackageParser(567):   at android.app.Activity.performCreate(Activity.java:4465)
10-03 18:36:05.272: W/PackageParser(567):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
10-03 18:36:05.272: W/PackageParser(567):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
10-03 18:36:05.272: W/PackageParser(567):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
10-03 18:36:05.272: W/PackageParser(567):   at android.app.ActivityThread.access$600(ActivityThread.java:123)
10-03 18:36:05.272: W/PackageParser(567):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
10-03 18:36:05.272: W/PackageParser(567):   at android.os.Handler.dispatchMessage(Handler.java:99)
10-03 18:36:05.272: W/PackageParser(567):   at android.os.Looper.loop(Looper.java:137)
10-03 18:36:05.272: W/PackageParser(567):   at android.app.ActivityThread.main(ActivityThread.java:4424)
10-03 18:36:05.272: W/PackageParser(567):   at java.lang.reflect.Method.invokeNative(Native Method)
10-03 18:36:05.272: W/PackageParser(567):   at java.lang.reflect.Method.invoke(Method.java:511)
10-03 18:36:05.272: W/PackageParser(567):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-03 18:36:05.272: W/PackageParser(567):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-03 18:36:05.272: W/PackageParser(567):   at dalvik.system.NativeStart.main(Native Method)
10-03 18:36:05.272: W/PackageInstaller(567): Parse error when parsing manifest. Discontinuing installation
然而,我的更新程序在运行版本2.3.5的DroidX2上运行。安装应用程序的意图非常好,一旦他们确认了它安装的应用程序权限

我能够在2.3.5版上重现解析错误,如下所示:

我通常只是通过运行eclipse来安装应用程序,但如果我在PackageExplorer窗口中右键单击该软件包,使用android工具导出一个未签名的.apk,并尝试手动安装该软件包,它将不会安装

如果我使用project bin文件夹中的.apk,它将在2.3.5上安装fine并更新fine

以下是我使用的asynctask类:

public class UpdateWireless extends AsyncTask<String,Void,String>{
private Context context;
public void setContext(Context contextf){
context = contextf;
}
@Override
protected String doInBackground(String... arg0) {
try {
URL url = new URL(arg0[0]);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
String PATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/download/";
File oldFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/download/AMWireless.apk");
if(oldFile.exists())
{
oldFile.delete();
}
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, "AMWireless.apk");
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
} catch (IOException e){
}
return "File Saved";
}
protected void onPostExecute(String result) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new      File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/download/"+"AMWireless.apk")), "application/vnd.android.package-archive");
startActivity(intent); 
}

}
这一行抛出一个“未找到文件”异常,因为它在我的服务器上看不到该文件,而且它从不下载。安卓2.3.5发现该文件没有异常,下载并安装良好。。。这里有什么问题

编辑2:已解决
我最初试图在一个由IIS提供服务的站点上托管该文件,而旧版本的android并不在意,但新版本不会看到该文件。一旦我将.apk移动到运行apache的web服务器上,我就没有任何问题了。因此,IIS或我的配置有些可疑…

回答了我自己的问题。是我在哪里托管文件的问题。IIS和android不能很好地配合:(解决方案:将.apk文件移动到apache服务器

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wireless.wmaa"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.DELETE_PACKAGES"/>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
                                     >
        <activity
            android:label="@string/app_name"
            android:name=".SelectServer" 
            android:theme="@android:style/Theme.NoTitleBar"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" /> 
             </intent-filter>"
            </activity>
        <activity
            android:name=".UpdateApp"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar"
            android:screenOrientation="landscape" >  
            <intent-filter>
            </intent-filter>
        </activity>

        <activity
            android:name=".WirelessActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar"
            android:screenOrientation="landscape" >  
            <intent-filter>
            </intent-filter>
        </activity>
    </application>


</manifest>
InputStream is = c.getInputStream();