我尝试使用本机C / C ++代码创建一个OSGi包,以便在运行Felix的Android设备上进行部署。
我能够使用Android NDK arm-linux-androideabi工具链编译本机代码并将其链接到共享对象。
现在,我尝试使用eclipse PDE(Export-> Deployable插件和片段)将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_Test:
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_example:
#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;
}
清单:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: JNI Test
Bundle-SymbolicName: my.bundle.jni_test
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-NativeCode: natives/libjni_example.so;osname=linux;processor=arm
Export-Package: my.bundle.jni_test
build.properties:
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
natives/libjni_example.so
答案 0 :(得分:0)
似乎是在'Window - &gt;下定义的目标平台偏好 - &gt;插件开发 - 目标平台'阻止导出成功。
我添加了一个新条目,复制当前目标平台的设置(选择“当前目标”选项)。在那里,我在'环境'下将'架构'值改为'arm'。由于'arm'不是下拉列表提供的选项,我手动将其键入文本字段。
就是这样。使用此目标配置时,一切正常。捆绑包已成功导出,我可以在我的Android设备上使用它。