Aynı ihtiyaç vardı ve ağır araştırmaların 2 gün sonra, bu soruna bir çözüm geldi. Bu basit değildir ve Android Sistem kodunu da değiştirebilmenizi gerektirir.
Temel olarak PackageManagerService, sistem uygulamalarının, güncelleştirilmemişlerse, yerel ikili dosyalarını (.so dosyaları) paketlerinden açmasını engeller. Bu yüzden bunu düzeltmenin tek yolu, PMS.java'yı değiştirerek (bu problemi çözmek için denediğimden beri uygun bir ruh haline soktu). Sistemin ilk açılışta üzerinde
, bir isPackageNative (PackageParser.Package pkg) yazarak yerli ikili için her sistem paketi kontrol fonksiyonu:
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;
}
Bu fonksiyon kontrolleri her paket bir yerli kütüphane için ve varsa Bir tane açarım. PMS bu denetimi scanPackageLI (....) içinde yapar. yönteminde aşağıdaki kodu arayın:
if (isSystemApp(pkg) && !isUpdatedSystemApp(pkg))
ve isPackageNative (pkg) işareti eklenir. Gerekli diğer küçük değişiklikler var ama muhtemelen bu yöne sahip olduğunuzda bunu anlayacaksınız. Umarım yardımcı olur!
Teknik olarak, ben /data/data/com.yourpackage.name/lib dizinine .so dosyasının kopyalanması gerektiğine inanıyorum, ancak önceden yüklenmiş uygulamalarda aynı sorunu yaşıyorum bunu kopyalamak değil APK. – Devunwired
Ne yaptığımız sadece 7zip gibi herhangi bir zip araçları kullanarak el ile bu dosyayı APK'dan çıkardık. Ardından, android kaynak kodunu derlerken dosyaları /out/..../system/lib dizinine kopyalayacak bir make dosyası oluşturduk. Bizim durumumuzda, bir yerel uygulama tarafından ihtiyaç duyulduğundan ROM görüntüsüne dahil etmek istiyoruz, bu yüzden/system/lib dizinine kopyalamamız gerekiyor. – artsylar
bu foruma başvurabilirsiniz https://groups.google.com/group/android-ndk/browse_thread/thread/2d08a95b3038e532?hl=ja Onlar bizimki gibi aynı sorunu vardı – artsylar