2013-08-03 2 views
2

Я пытаюсь внедрить среду Knopflerfish в приложение Android для динамического загрузки и выгрузки пакетов. Я следовал this учебное пособиеВложение Knopflerfish в Android не работает

Первый шаг, который я сделал, это загрузить ссылку framework.jar frome this и добавить его в мой путь к классу в моем проекте eclipse.

Кроме того, ниже мой метод OnCreate():

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    Map fwprops = new Hashtable(); //CHANGED 
    // add any framework properties to fwprops 
    FrameworkFactory ff = new FrameworkFactoryImpl(); 
    mFramework = ff.newFramework(fwprops); 
    try { 

     mFramework.init(); //ERROR HERE!! 

    } catch (BundleException be) { 
     // framework initialization failed 

     Log.d(TAG, be.getStackTrace().toString()); 
    } 



} 

Обратите внимание, что я изменил одну строку кода, поскольку он показывает ошибку синтаксиса.

Что:

Dictionary fwprops = new Hashtable(); 
to 
Map fwprops = new Hashtable(); //CHANGED 

Синтаксис Error: The method newFramework(Map) in the type FrameworkFactory is not applicable for the arguments (Dictionary)

Теперь, согласно @ldx в this сообщению, «Пластыри я представил для лучшей поддержки Android/Dalvik в Knopflerfish были объединены так исправление и перекомпиляция KF больше не требуется: «

и поэтому я не добавил ничего, предполагая, что мой код достаточно, как сейчас.

Когда я запускаю приложение. Я сразу получаю: Unfortunately, Knopflerfish_Android has stopped на экране.

Может кто-нибудь помочь? Ниже LogCat:

08-04 18:25:35.233: E/Trace(7018): error opening trace file: No such file or directory (2) 
08-04 18:25:36.793: D/AndroidRuntime(7018): Shutting down VM 
08-04 18:25:36.793: W/dalvikvm(7018): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
08-04 18:25:36.813: E/AndroidRuntime(7018): FATAL EXCEPTION: main 
08-04 18:25:36.813: E/AndroidRuntime(7018): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.knopflerfish_android/com.example.knopflerfish_android.MainActivity}: java.lang.RuntimeException: Failed to initialize storage org.knopflerfish.framework.bundlestorage.file.BundleStorageImpl 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.os.Looper.loop(Looper.java:137) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at dalvik.system.NativeStart.main(Native Method) 
08-04 18:25:36.813: E/AndroidRuntime(7018): Caused by: java.lang.RuntimeException: Failed to initialize storage org.knopflerfish.framework.bundlestorage.file.BundleStorageImpl 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at org.knopflerfish.framework.FrameworkContext.init(FrameworkContext.java:343) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at org.knopflerfish.framework.SystemBundle.doInit(SystemBundle.java:513) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at org.knopflerfish.framework.SystemBundle.init(SystemBundle.java:125) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at com.example.knopflerfish_android.MainActivity.onCreate(MainActivity.java:39) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.app.Activity.performCreate(Activity.java:5104) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  ... 11 more 
08-04 18:25:36.813: E/AndroidRuntime(7018): Caused by: java.lang.reflect.InvocationTargetException 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at java.lang.reflect.Constructor.constructNative(Native Method) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at org.knopflerfish.framework.FrameworkContext.init(FrameworkContext.java:341) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  ... 17 more 
08-04 18:25:36.813: E/AndroidRuntime(7018): Caused by: java.lang.RuntimeException: Cannot create directory: /fwdir/bs 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at org.knopflerfish.framework.Util.getFileStorage(Util.java:99) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  at org.knopflerfish.framework.bundlestorage.file.BundleStorageImpl.<init>(BundleStorageImpl.java:127) 
08-04 18:25:36.813: E/AndroidRuntime(7018):  ... 20 more 
08-04 18:25:39.543: I/Process(7018): Sending signal. PID: 7018 SIG: 9 

ответ

1

В комментариях // add any framework properties to fwprops, я только должен был добавить Рамочный запуск свойства, определяющее постоянную директорию для хранения, используемой фреймворка. Поскольку это Android, значение по умолчанию для каталога хранилища не работает. Вместо этого я должен указать каталог под sdcard. Таким образом, я добавил эту строку:

fwprops.put("org.osgi.framework.storage", "sdcard/fwdir"); 

Ниже мой обновленный код:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Map<String, String> fwprops = new Hashtable<String, String>(); //CHANGED 

     // add any framework properties to fwprops 
     fwprops.put("org.osgi.framework.storage", "sdcard/fwdir"); 

     FrameworkFactory ff = new FrameworkFactoryImpl(); 
     mFramework = ff.newFramework(fwprops); 

     try { 

      mFramework.init(); //THIS WORKS NOW :P :P 

     } catch (BundleException be) { 
      // framework initialization failed 

      Log.d(TAG, be.getStackTrace().toString()); 

     } 

    } 

Благодаря этим двум ссылкам: http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/Constants.html#FRAMEWORK_STORAGE http://www.knopflerfish.org/releases/current/docs/bundledoc/index.html?docpage=framework/index.html

Смежные вопросы