Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;不满意的本机代码过滤器“;导出包含本机Android库的OSGi捆绑包时_Android_Eclipse_Java Native Interface_Osgi_Apache Felix - Fatal编程技术网

&引用;不满意的本机代码过滤器“;导出包含本机Android库的OSGi捆绑包时

&引用;不满意的本机代码过滤器“;导出包含本机Android库的OSGi捆绑包时,android,eclipse,java-native-interface,osgi,apache-felix,Android,Eclipse,Java Native Interface,Osgi,Apache Felix,我尝试使用本机C/C++代码创建一个OSGi捆绑包,用于在运行Felix的Android设备上部署 我能够使用Android NDK arm linux AndroidABI工具链编译本机代码并将其链接到共享对象 现在,我尝试使用EclipsePDE(导出->可部署插件和片段)将OSGi包导出到.jar文件中。这是失败的。弹出的错误窗口告诉我: 'Export Plug-ins' has encountered a problem. Processing inclusion from feat

我尝试使用本机C/C++代码创建一个OSGi捆绑包,用于在运行Felix的Android设备上部署

我能够使用Android NDK arm linux AndroidABI工具链编译本机代码并将其链接到共享对象

现在,我尝试使用EclipsePDE(导出->可部署插件和片段)将OSGi包导出到.jar文件中。这是失败的。弹出的错误窗口告诉我:

'Export Plug-ins' has encountered a problem. 
Processing inclusion from feature org.eclipse.pde.container.feature: Bundle my.bundle.jni_test_1.0.0.qualifier failed to resolve: 
     Unsatisfied native code filter: natives/libjni_example.so; processor=arm; osname=linux.
当将处理器设置为其他类型(如x86)时,导出工作正常,但在Android设备上启动时,在捆绑包中会出现“未解决的约束”错误

我希望,我没有做一些完全愚蠢的事情。有人知道这里出了什么问题吗?如何将为Android编译的本机代码添加到OSGi捆绑包中

为完整起见,我附加了Java、C、Manifest和build.properties内容:

Java->JNI\U测试:

package my.bundle.jni_test;
public class JNI_Test {
    private void doWork() {
        System.out.println("3+3=" + add(3,3));
    }
    static {
        System.loadLibrary("jni_example");
    }
    public final static native int add(int x, int y);
}
C->jni_示例:

#include "include/my_bundle_jni_0005ftest_JNI_0005fTest.h"
#include <stdio.h>
JNIEXPORT jint JNICALL Java_my_bundle_jni_1test_JNI_1Test_add(JNIEnv *env, jclass clazz, jint x, jint y) {
    char buf[100];
    sprintf(buf, "adding %d to %d\n", x, y);
    fprintf(stdout, "[INFO] - %s", buf);
    fflush(stdout);
    return x+y;
}
build.properties:

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               natives/libjni_example.so

似乎在“窗口->首选项->插件开发-目标平台”下定义的目标平台阻止了导出成功

我添加了一个从当前目标平台复制设置的新条目(选择选项“当前目标”)。在那里,我将“环境”下的“架构”值更改为“arm”。由于“arm”不是下拉列表提供的选项,我在文本字段中手动键入了它

就这样。使用此目标配置时,现在一切正常。该捆绑包已成功导出,我可以在我的Android设备上使用它

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               natives/libjni_example.so