这个问题可能早些时候曾被问过,但无法得到任何明确答案。我基本上不希望和客户端交互更新和其他东西,他们只能看到应用程序运行,他们很高兴。但为了做到这一点,我需要一些后台线程或某些东西来检查市场的新更新,并在后面更新它,并在应用更新后重新启动应用程序。
P.S。我对Android开发是全新的,所以非常抱歉,如果我听起来很疯狂,但这是我的要求
答案 0 :(得分:3)
AFAIK,如果您具有root访问权限,则该过程如下:
/system/app
文件夹(作为系统应用)您需要以下权限:
android.permission.INSTALL_PACKAGES
android.permission.DELETE_PACKAGES
android.permission.CLEAR_APP_CACHE
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
您的应用必须使用系统签名
进行签名java -jar signapk.jar platform.x509.pem platform.pk8 helloworld.apk hello.apk
检查后台线程中的更新并将更新的.apk文件下载到临时位置,例如apk_path
以编程方式执行pm install apk_path
命令,下面是一个片段:
public String silentInstallation(String apkPath)
{
String[] args = { "pm", "install", "-r", apkPath };
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process process = null;
InputStream errIs = null;
InputStream inIs = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
process = processBuilder.start();
errIs = process.getErrorStream();
while ((read = errIs.read()) != -1) {
baos.write(read);
}
baos.write('\n');
inIs = process.getInputStream();
while ((read = inIs.read()) != -1) {
baos.write(read);
}
byte[] data = baos.toByteArray();
result = new String(data);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (errIs != null) {
errIs.close();
}
if (inIs != null) {
inIs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (process != null) {
process.destroy();
}
}
return result;
}
希望它有所帮助。
答案 1 :(得分:3)
除非
,否则无法在没有用户互动的情况下更新(或安装)应用此外,没有官方API可用于检查Google Play商店中提供的应用版本。
您可以通过跟踪Google Play之外的当前版本,然后通过启动市场链接提示更新用户来实现您尝试做的一些操作。如果您从辅助应用程序执行此操作,您甚至可以等待更新完成,然后重新启动应用程序。
实际上,由于前几位评论者所说的原因,您无法在没有用户互动的情况下进行静音安装/更新,这是一件好事(tm)。