AWS'de VM'de bazı Android kodlarını çalıştırmaya çalışıyorum. Ben kaynağından Android'i derledik ve açıkça bir kütüphane yüklemeye çalışıyorum ne zaman Dalvik vm içinde (System.load kullanarak) Ben günlüğü aşağıdaki bkz:Self-compiled dalvik paylaşılan kütüphaneleri yüklemiyor
android_update_LD_LIBRARY_PATH not found; .so dependencies will not work!
Class bu hatayı oluşturur:
public class Server {
private static final int port = 8080;
public static void main(String[] args) throws Exception {
System.load("libandroid_runtime.so");
WebServer webServer = new WebServer(port);
XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
PropertyHandlerMapping phm = new PropertyHandlerMapping();
phm.addHandler("ImgCat", ImgCat.class);
xmlRpcServer.setHandlerMapping(phm);
XmlRpcServerConfigImpl serverConfig =
(XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
serverConfig.setEnabledForExtensions(true);
serverConfig.setContentLengthOptional(false);
webServer.start();
}
}
Senaryo ben dalvikvm programları çalıştırmak için kullanın:
#!/bin/sh
base=/opt/android
root=$base/out/host/linux-x86
export ANDROID_ROOT=$root
bootpath=$root/framework
export BOOTCLASSPATH=$bootpath/core.jar:$bootpath/ext.jar:$bootpath /framework.jar:$bootpath/android.policy.jar:$bootpath/services.jar
export LD_LIBRARY_PATH=$root/lib:$LD_LIBRARY_PATH
export ANDROID_DATA=/tmp/dalvik_$USER
mkdir -p $ANDROID_DATA/dalvik-cache
echo $LD_LIBRARY_PATH
exec dalvikvm [email protected]
dalvikvm/çıkış/konak/linux-x86 gelen, hedef değil çalıştırılabilir olduğunu. Bir problem olabilir ama hedeften dalvikvm çalıştırılamıyor (dosya komutu). Android'i bir araya getiren bir hedef buldum, ihtiyacım olan şeyi bana vereceğim, ama sim hedefinin mevcut olduğu yeri bulamadım.
Paylaşılan kitaplıkların yüklenmesiyle sorunun nasıl giderileceği konusunda bir fikriniz var mı? Ya da öğle yemeğinde hangi Android şubesinin sim hedefe sahip olduğunu biliyor musunuz?
Düzenleme: buldum
Bir şey daha ben WithFramework kullanarak app çalıştırırsanız o zaman bazı kütüphaneler ve çalışma sırasında parçalama arızası yükler olmasıdır.
Edit2:
Ben libdl ve libc'nizdeki ile ilgili bir sorun olabileceğini fark ettik. Libc, ana bilgisayarımdan farklı olan libdl'e bağlıdır.
readelf -d /home/ubuntu/android-x86/out/target/product/generic_x86/system/lib/libc.so
Dynamic section at offset 0x72c54 contains 21 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libdl.so]
0x0000000e (SONAME) Library soname: [libc.so]
0x00000019 (INIT_ARRAY) 0x727dc
Libdl şeye bağlı değildir: Ben readelf komutuyla kontrol ettim
readelf -d /home/ubuntu/android-x86/out/target/product/generic_x86/system/lib/libdl.so
Dynamic section at offset 0x658 contains 19 entries:
Tag Type Name/Value
0x0000000e (SONAME) Library soname: [libdl.so]
0x00000019 (INIT_ARRAY) 0x1640
Ama tanımsız bazı semboller vardır:
nm -D /home/ubuntu/android-x86/out/target/product/generic_x86/system/lib/libdl.so
0000164c T __FINI_ARRAY__
00001640 T __INIT_ARRAY__
0000173c A __bss_start
U __cxa_atexit
U __cxa_finalize
w __deregister_frame_info_bases
w __register_frame_info_bases
U __stack_chk_fail
0000173c A _edata
00001758 A _end
00000520 T dl_iterate_phdr
00000500 T dladdr
00000510 T dlclose
000004e0 T dlerror
000004d0 T dlopen
000004f0 T dlsym
Bir fikrin nasıl düzeltilir? (Düzeltmem gerekiyor mu?)