Android:当我尝试安装我签名的应用程序时,它显示 "App not installed"

Android: When I try to install my signed app, it says "App not installed"

当我尝试安装签名的 apk 文件时,应用程序安装程序显示 "App not installed"。
它发生在我制作的每个应用程序上。 即使我创建了一个全新的密钥库,或者如果我将构建模式设置为调试。
尽管如果我通过 Android Studio 安装它确实有效。但如果我需要与我的朋友分享它,我不能。
我试图在这个网站上寻找一个可以吸引我的情况的问题,但我没有找到任何问题。
我的应用程序正在运行并且(应该)已签名。我找不到任何不工作的理由。

例如,这是我在 Udacity 的 android 开发课程中制作的 JustJava 应用程序的代码。

activity_main.xml是:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <EditText
        android:id="@+id/name"
        android:hint="@string/name_field"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:layout_marginBottom="16dp"/>

    <TextView
        style="@style/HeaderTextStyle"
        android:text="@string/toppings" />


    <CheckBox
        android:id="@+id/topping_whipped_cream"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:paddingLeft="24dp"
        android:text="@string/topping_whipped_cream" />
    <CheckBox
        android:id="@+id/topping_chocolate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="16dp"
        android:paddingLeft="24dp"
        android:text="@string/topping_chocolate" />

    <TextView
        style="@style/HeaderTextStyle"
        android:text="@string/quantity" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="16dp">

        <Button

            android:id="@+id/decrement"
            android:layout_width="48dp"
            android:layout_height="wrap_content"
            android:onClick="decrement"
            android:text="@string/minus" />

        <TextView
            android:id="@+id/quantity_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="16dp"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:paddingTop="16dp"
            android:text="@string/quantity_num"
            android:textColor="@android:color/black"
            android:textSize="18sp" />

        <Button
            android:id="@+id/increment"
            android:layout_width="48dp"
            android:layout_height="wrap_content"
            android:onClick="increment"
            android:text="@string/plus" />

    </LinearLayout>


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">


        <Button
            android:id="@+id/order"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="submitOrder"
            android:text="@string/order_btn" />
    </LinearLayout>

</LinearLayout>

而 Java 是:

package com.example.android.justjava;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.text.NumberFormat;

/**
 * This app displays an order form to order coffee.
 */
public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
/**
 * Assigns the name text field
 */


/**
 * This method is called when the order button is clicked.
 */
int quantity = 1;

public void submitOrder(View view) {
    EditText name = (EditText) findViewById(R.id.name);
    String clientName = name.getText().toString();

    Intent submit = new Intent(Intent.ACTION_SEND);
    submit.setData(Uri.parse("mailto:"));
    submit.setType("*/*");
    submit.putExtra(Intent.EXTRA_CC, "roeyvi19@gmail.com");
    submit.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.mail_subject_order) + clientName);
    submit.putExtra(Intent.EXTRA_TEXT, createOrderSummary());
    if (submit.resolveActivity(getPackageManager()) != null) {
        startActivity(submit);
    }
}

public void increment(View view) {
    if (quantity < 99) {
        quantity += 1;
        displayQuantity(quantity);
    } else {
        Toast toast = Toast.makeText(getApplicationContext(),
                getString(R.string.over_100_coffees_toast), Toast.LENGTH_LONG);
        toast.show();
    }
}

public void decrement(View view) {
    if (quantity == 1) {
        Toast toast = Toast.makeText(getApplicationContext(), R.string.no_coffees_toast, Toast.LENGTH_SHORT);
        toast.show();
    } else {
        quantity -= 1;
        displayQuantity(quantity);
    }

}

/**
 * This method displays the given quantity value on the screen.
 *
 * @param quant
 */
private void displayQuantity(int quant) {
    TextView quantityTextView = (TextView) findViewById(
            R.id.quantity_text_view);
    quantityTextView.setText("" + quant);
}


/**
 * Creates a visual summary of the order.
 * <p/>
 * quantity is the number of cups of coffee ordered
 */

private String createOrderSummary() {
    /**
     * Assigns the whipped cream checkbox
     */
    CheckBox toppingWhippedCream = (CheckBox) findViewById(R.id.topping_whipped_cream);
    boolean isCheckedWhippedCream = toppingWhippedCream.isChecked();
    /**
     * Assigns the chocolate checkbox
     */
    CheckBox toppingChocolate = (CheckBox) findViewById(R.id.topping_chocolate);
    boolean isCheckedChocolate = toppingChocolate.isChecked();
    //retrieve client's name
    EditText name = (EditText) findViewById(R.id.name);
    String clientName = name.getText().toString();
    /**
     * Inputs the total price
     */
    int pricePerCup = 5;
    if (isCheckedWhippedCream) {
        pricePerCup += 1;
    }

    if (isCheckedChocolate) {
        pricePerCup += 2;
    }
    int totalPrice = pricePerCup * quantity;
    return          //returns the name of the client
            getString(R.string.name_at_order_summary) + clientName + "\n"
                    //return quantity
                    + getString(R.string.quantity_at_order_summary) + quantity + "\n"
                    //return if whipped cream is checked
                    + getString(R.string.topping_whipped_cream_at_order_summary) + isCheckedWhippedCream + "\n"
                    //return if chocolate is checked
                    + getString(R.string.topping_chocolate_at_order_summary) + isCheckedChocolate + "\n"
                    //return total price
                    + getString(R.string.total_price_at_order_summary) + totalPrice + "\n" +
                    getString(R.string.thank_you_at_order_summary);
}


}

主要节日:

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".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>

谢谢!

因为您已经启用了从 'unknown sources'

安装

取自'App not Installed' Error on Android

尝试在 phone 上安装 apt 时也会出现此错误,而该 apt 与先前版本的相同 apt 没有使用相同的证书签名,因此您可能想检查是否使用过之前您使用了相同的证书。确保这一点的一种方法是卸载所有以前的版本并安装新签名的 apk

检查是否在来宾帐户中(如果您在 android 5.0+ 中模拟)是否安装了该应用程序,如果是,则将其删除并从 IDE 重新安装。