android 应用程序是否有可能在运行时创建自己的 apk 文件?
我希望我的应用程序能够通过蓝牙发送自己,我该怎么做?
最好的方法是:
// Get current ApplicationInfo to find .apk path
ApplicationInfo app = getApplicationContext().getApplicationInfo();
String filePath = app.sourceDir;
Intent intent = new Intent(Intent.ACTION_SEND);
// MIME of .apk is "application/vnd.android.package-archive".
// but Bluetooth does not accept this. Let's use "*/*" instead.
intent.setType("*/*");
// Only use Bluetooth to send .apk
intent.setPackage("com.android.bluetooth");
// Append file and send Intent
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(filePath)));
startActivity(Intent.createChooser(intent, "Share app"));
终于我找到了答案!不需要制作应用程序的apk,因为android将apk文件保存在内存中,您可以使用PackageManager访问应用程序的apk文件,它会给出保存apk的位置,然后您可以通过蓝牙发送它!
最好的选择是将 .apk 文件放在资产中并从那里发送。
为了避免更新出现问题,您可以告诉您的应用在发送之前从某个服务器下载 .apk。(但是为什么要这样做,其他用户可以从市场上下载它?我很抱歉,但也许如果你解释了这个想法背后的原因,我们可以为你的选择给你一个更好的解释?)
您的 apk 文件是由您在 Eclipse 中的项目制作的。因此,实际上从应用程序中的这些文件构建 .apk 是荒谬的,而且可能是不可能的(您必须编写编译、构建过程......)
您最好的选择是简单地重定向到 Google Play 商店或您自己托管的 apk 版本。
您不能真正捆绑应用程序本身,因为共享的捆绑 apk 没有与下一个人共享的捆绑 apk,因此该功能在一次共享后中断。
如果您真的想拥有此功能,则必须在首次启动应用程序时将 apk(从您自己的服务器)下载到共享存储。下载后,您可以启用“通过蓝牙发送”功能。
您可以使用PackageManager
获取应用程序 APK 的路径,然后在 aACTION_SEND
Intent
中使用该路径通过蓝牙发送文件。
在这里查看示例: Android 上的蓝牙文件传输(甚至受限类型)