Çalışma zamanında yerel kitaplıklar için yeni bir yol eklemek mümkün müdür? (Java'yı java.library.path özelliği ile başlatmak yerine), System.loadLibrary(nativeLibraryName)
numaralı telefona nativeLibraryName
bulmaya çalışırken bu yolu da içerecektir. Bu mümkün mü yoksa JVM başladıktan sonra bu yollar donuyor mu?Java'da çalışma zamanında yerel kitaplıklar için yeni yollar ekleme
cevap
Bu küçük hack olmadan bu blog bunu yapmanın 2 yolu sağlamak
(yani ClassLoader sınıfının özel alanları erişim) imkansız gibi.
Kayıt için kısa versiyonu burada.
Seçenek 1: mevcut java.library.path
/**
* Adds the specified path to the java library path
*
* @param pathToAdd the path to add
* @throws Exception
*/
public static void addLibraryPath(String pathToAdd) throws Exception{
final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
usrPathsField.setAccessible(true);
//get array of paths
final String[] paths = (String[])usrPathsField.get(null);
//check if the path to add is already present
for(String path : paths) {
if(path.equals(pathToAdd)) {
return;
}
}
//add the new path
final String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
newPaths[newPaths.length-1] = pathToAdd;
usrPathsField.set(null, newPaths);
}
için yeni bir yol ekleyin: tam
public static void setLibraryPath(String path) throws Exception {
System.setProperty("java.library.path", path);
//set sys_paths to null so that java.library.path will be reevalueted next time it is needed
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
}
Seçenek 2) yeni bir değer ile java.library.path yerine
gerçekten oldukça hack :) bunu gönderdiğiniz için teşekkürler. Bu hayla olmamalı, muhtemelen güvenlik nedenlerinden dolayı bu yolu değiştirmek zor, emin değil. Bunu yapmaktan kaçınacağım ama var olduğunu bilmek güzel. – Sergio
Belirtilen Field sınıfı: "import java.lang.reflect.Field;" – Troyseph
Java9, "yasa dışı yansıtmalı erişim işlemi" kaydeder. – Stefan
- 1. Çalışma zamanında görüntü ekleme
- 2. Java'da çalışma zamanında yeni sınıflar ekleme veya ekleme
- 3. Çalışma zamanında bir Sınıf için belirli bir Özellik Ekleme
- 4. Çalışma zamanında
- 5. çalışma zamanında dinamik
- 6. Çalışma zamanında XAML yükleniyor?
- 7. Çekirdeği çalışma zamanında değiştirin
- 8. Java Swing - çalışma zamanında dinamik olarak yerel ayarları değiştir
- 9. Çalışma zamanında menü değiştirme
- 10. Tango/Unity: Çalışma zamanında TangoApplication.m_enableDepth immutable nedir?
- 11. Java: çalışma zamanında yeni uygulama türü oluşturulsun mu?
- 12. Çalışma zamanında Java zaman dilimi değişikliği
- 13. ExtJS: çalışma zamanında Menü örneğine yeni MenuItem eklemek
- 14. Java - Özellikler: Çalışma zamanında özellikler dosyasına yeni anahtarlar ekle?
- 15. Java'da çalışma zamanında deve rotası ekleyin
- 16. Çalışma zamanında dosya uzantısını değiştirme
- 17. Çalışma zamanında Ehcache önbellek boyutu
- 18. Çalışma zamanında Clojure "sabitlerini" ayarlama
- 19. Çalışma zamanında sql_mode nasıl değiştirilir
- 20. Luigi - Unilfilled% s çalışma zamanında
- 21. knockout.js çalışma zamanında yükleme şablonları
- 22. Çalışma zamanında Guice bağlarının değiştirilmesi
- 23. Salatalık javada senaryo adı nasıl alınır?
- 24. Çalışma zamanında hazırda bekletme yapılandırması
- 25. TypeScript - Modül çalışma zamanında tanımsız
- 26. javafx çalışma zamanında css değiştirme
- 27. Çalışma zamanında node.js sürümünü edinin
- 28. ffmpeg için yeni CODEC ekleme
- 29. DLL için yeni özellik ekleme
- 30. Çalışma zamanında Hazırlama Profilinin EXPIRATION tarihini alın.
http://stackoverflow.com/questions/2899804/setting-classpath-during-runtime –