安装失败,消息 Error: android.os. ParcelableException: java.io.IOException: 仅请求内部,但没有足够的空间

我明白你的意思了

> Installation failed with message Failed to establish session.

因此,按照一些对问题的反应,我禁用了即时运行,我开始得到

> Installation failed with message Error: android.os.ParcelableException: java.io.IOException: Requested internal only, but not enough space.

我尝试过重新构建、清理项目、禁用和启用 Instant Run 以及构建 APK,但都没有解决问题。

这是我的 build.gradle (Module: app)。

    apply plugin: 'com.android.application'


android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.gabriel.justmeet"
minSdkVersion 21
targetSdkVersion 28
versionCode 9
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
useLibrary 'org.apache.http.legacy'
}


dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.volley:volley:1.1.0'
}

and this is the build.gradle(Project)

// Top-level build file where you can add configuration options common to all sub-projects/modules.


buildscript {


repositories {
google()
jcenter()
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'




// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}


}


allprojects {
repositories {
google()
jcenter()
maven { url 'http://repo1.maven.org/maven2' }
}
}


task clean(type: Delete) {
delete rootProject.buildDir
}

这是从我修改 RegisterActivity 时开始的,因此它可能会有所帮助

package com.example.gabriel.paska;


import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;


import java.util.HashMap;
import java.util.Map;


public class RegisterActivity extends AppCompatActivity {
public static final String REGISTER_URL ="http://justmeet.000webhostapp.com/php/register.php";
public static final String KEY_USERNAME ="username";
public static final String KEY_PASSWORD="password";
public static final String KEY_NAME ="name";
public static final String KEY_AGE="age";
public static final String REGISTER_SUCCESS ="RegisterSuccess";
public static final String SHARED_PREF_NAME="tech";
public static final String USERNAME_SHARED_PREF="username";
public static final String LOGGEDIN_SHARED_PREF="loggedin";
private boolean loggedIn=false;
EditText etAge;
EditText etName;
EditText etPassword;
EditText etUsername;
Button bRegister;






@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);


etAge = findViewById(R.id.etAgeR);
etName = findViewById(R.id.etNameR);
etPassword = findViewById(R.id.etPwordR);
etUsername = findViewById(R.id.etUsernameR);
bRegister = findViewById(R.id.btRegister);


bRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
register();
}
});
}
private void register() {
final String name = etName.getText().toString().trim();
final String password = etPassword.getText().toString().trim();
final String username = etUsername.getText().toString().trim();
final String age = etAge.getText().toString().trim();


StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(response.trim().equalsIgnoreCase(REGISTER_SUCCESS)){


SharedPreferences sharedPreferences = RegisterActivity.this.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);


SharedPreferences.Editor editor = sharedPreferences.edit();


editor.putBoolean(LOGGEDIN_SHARED_PREF, true);
editor.putString(USERNAME_SHARED_PREF, name);


editor.apply();


Intent intent = new Intent(RegisterActivity.this, UserActivity.class);
startActivity(intent);
}else{
Toast.makeText(RegisterActivity.this, "Register Failed" + response.trim(), Toast.LENGTH_LONG).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> prams = new HashMap<>();
prams.put(KEY_USERNAME, username);
prams.put(KEY_PASSWORD, password);
prams.put(KEY_NAME, name);
prams.put(KEY_AGE, age);


return prams;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
@Override
protected void onResume() {
super.onResume();
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_NAME,Context.MODE_PRIVATE);
loggedIn = sharedPreferences.getBoolean(LOGGEDIN_SHARED_PREF, false);
if(loggedIn){
Intent intent = new Intent(RegisterActivity.this, UserActivity.class);
startActivity(intent);
}
}
}
89423 次浏览

文件系统没有空间:

java.io.IOException: Requested internal only, but not enough space.

问题是:

android:installLocation="internalOnly"

要么删除它,要么替换它:

android:installLocation="preferExternal"

或者通过卸载或删除某些东西在设备/模拟器上腾出一些空间

或者简单地为虚拟 SD 卡分配更多的兆字节。

在 Android Studio 中,打开 AVD Manager 并编辑有问题的模拟器。在编辑界面内,你可能需要点击“显示高级设置”。向下滚动并增加内存和 SD 卡内存。这样做之后,我可以再次安装我的应用程序。

如果您正在使用电话,这个错误来源于较少的存储空间。 腾出一些空间,再试一次,应该可以。

问题在于设备上正在运行的存储空间。尝试安装清除空间或将其安装在模拟器上。

我卸载了所有我运行的应用程序并安装在虚拟设备上,错误消失了。

您的应用程序试图安装在您的虚拟设备的内部空间,它没有足够的空间。如果运行模拟器,进入配置/存储,您将看到没有空间。

Sometimes, the emulator is created with 800Mb of internal space, and Android Oreo (for example) occupies all that space, and it is not possible to install anything.

此外,即使你将你的应用配置为“更喜欢外部”,应用仍然试图安装在内部存储,所以你不能解决这个问题。

The only solution that worked for me was increasing the internal space of the emulator, you can do that by following one of these options:

A)进入 Android SDK-> ADV Manager,找到你的模拟器,编辑首选项,增加空间,复制它,或者你想要的。

B)进入带有模拟器配置的文件夹(在 Windows C 中:/Users/your _ user/。Android/avd/your _ Simulator)并编辑 * 。在 ini 文件中,您可以看到与空间、内存等相关的值,只需增加这些值并保存。

Visual Studio 2017与 Android SDK/ADV Manager 的集成非常糟糕,所以你需要100% 手动完成,而且当错误发生时你不会收到任何信息或指令,所以修复它真的很烦人: (而且99% 的 Xamarin 问题都是一样的!

这只是虚拟设备耗尽了空间。每次运行应用程序时,虚拟设备上的每次安装都会占用一点空间。随着时间的推移,空间会被填满,直到它被用完。你可以按照一些答案的建议增加空间——这最初会起作用,但最终空间也会用完。

通过虚拟设备的设置应用程序,你可以查看你还剩多少空间。在这里你可以看到几乎整个 GB 都用完了,但是应用程序本身只使用了132 MB,很明显有些地方不对劲。

enter image description here

进入 AVD 管理器,在你的设备的操作中有“擦除数据”的选项-这样做。

enter image description here

回到设置应用程序,你现在可以看到空间被释放出来,你的应用程序有空间可以安装——直到下一次它运行出来的时候,你只需要重复这个过程。

enter image description here

在你的手机或模拟器上创建空间,它应该可以工作。

它只是意味着你想要测试应用程序或进行调试的设备没有足够的空间。清除一些记忆,然后再试一次。

此问题与模拟器中的存储有关。默认的 AndroidStudio 值2Gb 对于现代的 Android 版本来说是不够的。

enter image description here


解决方案

步骤1: 关闭模拟器。

步骤2: 擦除模拟器。

enter image description here

第三步: 将内部存储和 SD 卡更改为 4098MB

enter image description here

步骤4: 运行模拟器。

在模拟器上运行时,我发现即使我增加了内部磁盘空间,它仍然不能工作,并且保持相同的大小,我必须重新创建模拟器。