to jest po prostu czysta spekulacja, jak nigdy nie próbowałem użyć API pakietu Instalatora siebie.
można spróbować ustawić instalator packa ge dla aplikacji właściciela urządzenia (przy użyciu PackageManager.setInstallerPackageName()
). Ten pakiet instalatora musiałby być oddzielnym pakietem APK podpisanym z tym samym certyfikatem, co plik APK właściciela urządzenia.
getPackageManager().setInstallerPackage("<device.owner.package.name>", "<installer.package.name>");
ze swojego instalatora APK, można następnie wykorzystać PackageInstaller
przygotować aktualizacji:
PackageInstaller pi = getPackageManager().getPackageInstaller();
int sessId = pi.createSession(new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL));
PackageInstaller.Session session = pi.openSession(sessId);
OutputStream out = session.openWrite("app");
// .. write updated APK file to out
session.fsync(out);
session.commit(...);
session.close();
Nie jestem pewien, czy to po cichu instaluje aktualizację chociaż (lub jeśli to w ogóle działa w sposób, jaki bym się spodziewał).
Evolve (https://github.com/VivekPanyam/Evolve) może być pomocne –
Już to widziałem, ale nie mogłem go użyć, również jest w fazie alfa, co może spowodować awarię naszej aplikacji. Wydaje się, że zmienia kod w czasie wykonywania, więc wygląda na nieco skomplikowany. – Shubham
@Shubham czy to działa? – Maragues