Domanda

voglio caricare di terze parti biblioteca JNI in runtime.
Ho provato a caricare direttamente da sdcard. E 'da aspettarsi fallito.
Ho cercato di copiare libreria da sdcard a / dati / data / app / e poi
System.load(/data/data/app/libjni.so)
Funziona su HTC HERO, ma fallisce su HTC Legend con Android 2.1. fallisce durante l'esecuzione di codice nativo e scrittura per accedere uninformative stack trace Qualsiasi altro modo per farlo? Questo è il miglior pezzo di codice, che lavora a 1.5 (HTC Hero), ma donot lavori su 2.1 (HTC Legend).

FileInputStream fis = new FileInputStream("/sdcard/libjni.so");
File nf = new File("/data/data/app/libjni.so");
FileOutputStream fos = new FileOutputStream(nf);
byte[] buf = new byte[2048];
int n;
while ((n = fis.read(buf)) > 0)
    fos.write(buf, 0, n);
fis.close();
fos.close();
System.load("/data/data/app/libjni.so");
È stato utile?

Soluzione

dinamica caricatore di Android non può caricare il codice eseguibile dal file system della scheda SD, perché è contrassegnata come non eseguibile e non è possibile mappare le pagine di memoria eseguibili dalla memoria non eseguibile. (In teoria è possibile copiare manualmente il contenuto in eseguibile anonima mappate le pagine, ma questo è brutto. Le versioni di applicazioni che supportano Android su SD montare un file system eseguibili contenuti all'interno di un file sul sdcard, ma una terza parte applicazione non può scrivere chi)

Ma cosa si può fare è scrivere una libreria in una posizione scrivibile in interno di archiviazione - non la directory lib a cui non si ha accesso in scrittura, ma un altro trovato da Context.getDir ( ) o Context.getFilesDir () e poi caricarlo utilizzando il percorso completo e il nome del file utilizzando .so System.load () al posto di System.loadLibrary ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top