miałem te same potrzeby i po 2 dniach ciężkich badań, wpadłem na rozwiązanie tego problemu. Nie jest to proste i wymaga modyfikacji kodu systemu Android.
Zasadniczo usługa PackManagerService uniemożliwia aplikacjom systemowym rozpakowanie ich macierzystych plików binarnych (plików .so), o ile nie zostały one zaktualizowane. Jedynym sposobem na naprawienie tego jest modyfikacja PMS.java (trafnie nazwana, ponieważ próba rozwiązania tego problemu wpędziła mnie w okropny nastrój).
Na pierwszym uruchomieniu systemu, sprawdzić każdą paczkę systemową dla natywnych plików binarnych pisząc isPackageNative (PackageParser.Package pkg) funkcja:
private boolean isPackageNative(PackageParser.Package pkg) throws IOException {
final ZipFile zipFile = new ZipFile(pkg.mPath);
final Enumeration<? extends ZipEntry> privateZipEntries = zipFile.entries();
while (privateZipEntries.hasMoreElements()) {
final ZipEntry zipEntry = privateZipEntries.nextElement();
final String zipEntryName = zipEntry.getName();
if(true) Log.e(TAG, " Zipfile entry:"+zipEntryName);
if (zipEntryName.endsWith(".so")) {
zipFile.close();
return true;
}
}
zipFile.close();
return false;
}
Funkcja ta sprawdza każdy pakiet dla natywnej biblioteki i jeśli ma jeden, rozpakowuję go. PMS wykonuje tę kontrolę w scanPackageLI (....). Wyszukaj następujący kod w metodzie:
if (isSystemApp(pkg) && !isUpdatedSystemApp(pkg))
i dodaj test isPackageNative (pkg). Potrzebne są inne małe modyfikacje, ale prawdopodobnie zorientujesz się, że masz już ten kierunek. Mam nadzieję, że to pomoże!
Pod względem technicznym sądzę, że plik .so powinien zostać skopiowany do katalogu/data/data/com.yourpackage.name/lib, ale mam ten sam problem w wstępnie zainstalowanych aplikacjach, które nie kopiują tego pliku APK. – Devunwired
to, co zrobiliśmy, po prostu rozpakowaliśmy plik z APK ręcznie za pomocą dowolnego narzędzia zip, takiego jak 7zip. Następnie stworzyliśmy plik make, który skopiuje pliki do katalogu /out/..../system/lib podczas kompilowania kodu źródłowego Androida. W naszym przypadku chcielibyśmy umieścić go w obrazie ROM, ponieważ jest potrzebny natywnej aplikacji, dlatego musimy skopiować go do katalogu/system/lib. – artsylar
możesz odnieść się do tego forum https://groups.google.com/group/android-ndk/browse_thread/thread/2d08a95b3038e532?hl=ja mieli ten sam problem co nasz – artsylar