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 重新安装。
当我尝试安装签名的 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 重新安装。