Активность Android в OSGI Bundle

Я работаю над разработкой пакетов OSGI, которые имеют полную поддержку Android. До сих пор, по моим предыдущим вопросам, я смог использовать Android API в OSGI связке. Работает нормально и я попробовал. Я использую Felix Framework.

Тем не менее, я застрял сейчас в задаче создания пакета OSGI, чтобы иметь активность для Android и начать эту деятельность. Мне также нужны эти действия, чтобы иметь возможность запрашивать разрешения, поэтому я думаю, что мне понадобитсяAndroidManifest.xml в комплекте OSGI.

Проводя исследование, я смог найти только одного человека, описывающего его опыт в достижении этого. К сожалению, шаги, которые он упомянул, неоднозначны для меня.

В своем вопросеПолная поддержка Android для OSGI " , Вот'Что он сказал?

I have found a way to start activities owned by android bundles:

•the android bundle MUST be an APK which can be created using Eclipse Android Project
•add a Reference Library entry to the project Build Path for your OSGi framework (in my case framework.jar)
•edit bundle.manifest describing the bundle. The file is not part of the APK but will be used on build
•the bundle's code, especially the Activator class, MUST be in the same package as defined in AndroidManifest.xml AND the symbolic name of the bundle MUST be the package name as well. If these conditions are met then all of the classes will be correctly loaded. If not, it will result in seeing java.lang.NoClassDefFoundError on runtime
•Use Android Tools > Export Unsigned Android Package
•copy bundle.manifest in the unsigned APK as META-INF/MANIFEST.MF
•sign the APK using whatever certificate you want
•install the signed APK like any standard android application. Installation is required in order to have the Activity resolved. Without this the activity won't resolve and the bundle will fail
•have the OSGi framework load the bundle APK

Где он говорит:

•edit bundle.manifest describing the bundle. The file is not part of the APK but will be used on build

Все, что я сделал, это создал проект Android (APK) и следовал первым двум шагам. Но на этом третьем шаге выше я не могт найти"bundle.manifest" редактировать это. Его там вообще нет, так почему же он говорит «отредактируй»?

Кроме того, когда яExport Unsigned Android Packageоткуда и куда мне скопировать файл манифеста?

Наконец, является ли окончательный подписанный файл APK моим пакетом, который должен быть загружен фреймворком? Это кажется странным, потому что это даже не файл JAR.

Если эти шаги не помогут мне, то кто-то может привести меня в правильном направлении? Спасибо.

ОБНОВИТЬ:

Никто не отвечает на мой вопрос, поэтому я сделал следующее:

1- В своем проекте приложения для Android (который я пытаюсь сделать так, чтобы он действовал как пакет) я включил мой класс Activator в тот же пакет, который упоминался в AndroidManifest.xml. Вот'мойActivator.java учебный класс:

package com.example.patient;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

    private static BundleContext context;

    static BundleContext getContext() {
        return context;
    }


    public void start(BundleContext bundleContext) throws Exception {
        Activator.context = bundleContext;

   //I WOULD LIKE TO START THE ACTIVITY HERE TO DISPLAY THE TOAST MESSAGE
        System.out.println("Android APK Bundle Started");

    }


    public void stop(BundleContext bundleContext) throws Exception {
        Activator.context = null;



    }

}

и здесь'мойAndroidManifest.xml




    

    

    
        


        
        

                        
                

                

            
        
    


2- Я добавил справочную библиотеку в проект Build Path для моей платформы OSGi (felix.jar)

3- Я сгенерировал неподписанную копию своего проекта с помощью Android Tools.

4- Я добавил папку в корневой каталог неподписанной копии с именемMETA-INFи внутри этой папки я добавил файлMANIFEST.MFниже приведено содержимое этого файла:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Patient
Bundle-SymbolicName: com.example.patient
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.example.patient.Activator
Import-Package: org.osgi.framework;version="1.3.0"
Bundle-RequiredExecutionEnvironment: OSGi/Minimum-1.0

5- Я вручную подписал неподписанную копию, используя инструмент командной строки и jar signer. Что-то вроде:

jarsigner -verbose -keystore /path_to_keystore/mykeystore.keystore my_application.apk my_keystore_alias 

6- Я установил подписанную копию на своем ПК и на своей вкладке.

7. Наконец, я запускаю свое приложение и позволяю платформе OSGI загрузить тот же подписанный apk-файл.

НЕТ ИСПОЛЬЗОВАНИЯ, хотя состояние пакета активно, но я не вижу сообщения в методе start () активатора, что означает, что мой пакет загружен неправильно. Куда я пошел? Пожалуйста помоги.

ОБНОВЛЕНИЕ 25-11-2013

Я удостоверился, что сделал шаги правильно, и теперь я получил это:

11-25 17:54:08.600: W/System.err(2714): org.osgi.framework.BundleException: Not found: com.example.patient.Activator
11-25 19:22:36.590: W/System.err(6652): Caused by: java.lang.ClassNotFoundException: com.example.patient.Activator not found by com.example.patient

Это означает, что в моем комплекте нет класса Activator, но я уверен, что он есть. Что может быть не так?

ОБНОВЛЕНИЕ 26-11-2013

Я открыл подписанный APK с помощью WinZip. Я заметил, что в отличие от пакетов, которые я использовал для сборки, подписанный APK не содержит файлы .class, включая "Activator.class», поэтому я скопировал каталог com, содержащий все файлы .class проекта, и вставил его в подписанный APK. Затем я снова подписал этот APK. Теперь, когда я устанавливаю APK, я получаю следующий журнал, который содержит много ошибок:

11-25 23:16:25.651: D/dalvikvm(5617): DexOpt: --- BEGIN 'bundle.jar' (bootstrap=0) ---
11-25 23:16:26.271: D/dalvikvm(5617): DexOpt: --- END 'bundle.jar' (success) ---
11-25 23:16:26.271: D/dalvikvm(5617): DEX prep '/sdcard/felix-cache-1472376252.tmp/bundle1/version0.0/bundle.jar': unzip in 102ms, rewrite 620ms
11-25 23:16:26.271: W/dalvikvm(5617): Class resolved by unexpected DEX: Lcom/example/patient/Activator;(0x4074fa08):0x18a7b8 ref [Lorg/osgi/framework/BundleActivator;] Lorg/osgi/framework/BundleActivator;(0x40714410):0xbd630
11-25 23:16:26.271: W/dalvikvm(5617): (Lcom/example/patient/Activator; had used a different Lorg/osgi/framework/BundleActivator; during pre-verification)
11-25 23:16:26.271: I/dalvikvm(5617): Failed resolving Lcom/example/patient/Activator; interface 902 'Lorg/osgi/framework/BundleActivator;'
11-25 23:16:26.271: W/dalvikvm(5617): Link of class 'Lcom/example/patient/Activator;' failed
11-25 23:16:26.271: E/dalvikvm(5617): ERROR: defineClass(0x4074fa08, com.example.patient.Activator, 0x4079d468, 0, 955, 0x4073e918)
11-25 23:16:26.271: E/Zaid Log(5617): Problem installing the bundle :s
11-25 23:16:26.271: W/System.err(5617): org.osgi.framework.BundleException: Activator start error in bundle com.example.patient [1].
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.Felix.activateBundle(Felix.java:2196)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.Felix.startBundle(Felix.java:2064)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
11-25 23:16:26.271: W/System.err(5617):     at com.example.patient_application.MainActivity.onCreate(MainActivity.java:136)
11-25 23:16:26.271: W/System.err(5617):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
11-25 23:16:26.271: W/System.err(5617):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1715)
11-25 23:16:26.271: W/System.err(5617):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767)
11-25 23:16:26.271: W/System.err(5617):     at android.app.ActivityThread.access$1500(ActivityThread.java:122)
11-25 23:16:26.271: W/System.err(5617):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005)
11-25 23:16:26.271: W/System.err(5617):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-25 23:16:26.271: W/System.err(5617):     at android.os.Looper.loop(Looper.java:132)
11-25 23:16:26.271: W/System.err(5617):     at android.app.ActivityThread.main(ActivityThread.java:4028)
11-25 23:16:26.271: W/System.err(5617):     at java.lang.reflect.Method.invokeNative(Native Method)
11-25 23:16:26.271: W/System.err(5617):     at java.lang.reflect.Method.invoke(Method.java:491)
11-25 23:16:26.271: W/System.err(5617):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
11-25 23:16:26.271: W/System.err(5617):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
11-25 23:16:26.271: W/System.err(5617):     at dalvik.system.NativeStart.main(Native Method)
11-25 23:16:26.271: W/System.err(5617): Caused by: java.lang.UnsupportedOperationException: can't load this type of class file
11-25 23:16:26.271: W/System.err(5617):     at java.lang.VMClassLoader.defineClass(Native Method)
11-25 23:16:26.271: W/System.err(5617):     at java.lang.ClassLoader.defineClass(ClassLoader.java:319)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2279)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1501)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
11-25 23:16:26.271: W/System.err(5617):     at java.lang.ClassLoader.loadClass(ClassLoader.java:500)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1374)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4329)
11-25 23:16:26.271: W/System.err(5617):     at org.apache.felix.framework.Felix.activateBundle(Felix.java:2141)
11-25 23:16:26.271: W/System.err(5617):     ... 17 more

Ответы на вопрос(3)

Ваш ответ на вопрос