如何使我的 Android APK 在多个设备上兼容?
How to make my Android APK compatible across multiple devices?
对于上下文,我正在尝试在 Java 中创建一个可以与其他 phone 共享的 Android 应用程序。我设法让该应用成功地将自己的 APK 发送到另一个 android phone 使用蓝牙(参见下面的实现)。
问题是来自一个 phone 的 APK 无法安装在另一个 phone 上。为了排除故障,我下载了一个第三方 APK 提取器来发送我的应用程序,结果相同——APK 已成功传输,但不会安装在另一个 phone 上。然后我尝试使用 APK 提取器来分享随机选择的 Google Play 应用程序,一些应用程序会在第二个 phone 上成功安装,其他应用程序不会。
在这个阶段,我很确定这是一个兼容性问题。我怎样才能使我的 APK 跨设备更兼容?作为参考,我目前正在 3 phones 上测试它:Samsung Galaxy S7、Huawei Nova 3i 和 Motorolla XT1052,但最终我希望该应用程序可以在尽可能多的设备上访问。
提前致谢:)
sendApp 函数
public void sendApp(Activity activity) {
try {
PackageManager pm = activity.getPackageManager();
ApplicationInfo app = pm.getApplicationInfo(activity.getPackageName(), 0);
File apkFile = new File(app.publicSourceDir);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
Uri uri = FileProvider.getUriForFile(
getApplicationContext(),
BuildConfig.APPLICATION_ID + ".provider", //(use your app signature + ".provider" )
apkFile);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
Manifest.xml 提供商标签:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<!-- resource file to create -->
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths">
</meta-data>
</provider>
file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<root-path
name="root"
path="."/>
</paths>
发现问题了!
我发送的是调试 APK,而不是发布 APK。
我刚刚在 Android studio 中创建了一个已签名的 APK(Build>Generate Signed Bundle/APK)。
我自己并没有想出解决方案,但是回答者在我select它之前删除了他们的答案。
对于上下文,我正在尝试在 Java 中创建一个可以与其他 phone 共享的 Android 应用程序。我设法让该应用成功地将自己的 APK 发送到另一个 android phone 使用蓝牙(参见下面的实现)。
问题是来自一个 phone 的 APK 无法安装在另一个 phone 上。为了排除故障,我下载了一个第三方 APK 提取器来发送我的应用程序,结果相同——APK 已成功传输,但不会安装在另一个 phone 上。然后我尝试使用 APK 提取器来分享随机选择的 Google Play 应用程序,一些应用程序会在第二个 phone 上成功安装,其他应用程序不会。
在这个阶段,我很确定这是一个兼容性问题。我怎样才能使我的 APK 跨设备更兼容?作为参考,我目前正在 3 phones 上测试它:Samsung Galaxy S7、Huawei Nova 3i 和 Motorolla XT1052,但最终我希望该应用程序可以在尽可能多的设备上访问。
提前致谢:)
sendApp 函数
public void sendApp(Activity activity) {
try {
PackageManager pm = activity.getPackageManager();
ApplicationInfo app = pm.getApplicationInfo(activity.getPackageName(), 0);
File apkFile = new File(app.publicSourceDir);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
Uri uri = FileProvider.getUriForFile(
getApplicationContext(),
BuildConfig.APPLICATION_ID + ".provider", //(use your app signature + ".provider" )
apkFile);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
Manifest.xml 提供商标签:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<!-- resource file to create -->
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths">
</meta-data>
</provider>
file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<root-path
name="root"
path="."/>
</paths>
发现问题了! 我发送的是调试 APK,而不是发布 APK。 我刚刚在 Android studio 中创建了一个已签名的 APK(Build>Generate Signed Bundle/APK)。 我自己并没有想出解决方案,但是回答者在我select它之前删除了他们的答案。