接上篇博文 NDK下 将Platinum SDK 编译成so库 (android - upnp)
讲述了如何利用该代码库编译给android程序调用的so库,其中也提到了,在使用sample-upnp工程来测试生成的so库是无效的
大家比对一下Platinum开发库的Platinum\Source\Platform\Android\module\platinum\jni\platinum-jni.cpp和
Platinum\Source\Tests\MediaRenderer\MediaRendererTest.cpp
platinum-jni.cpp
#include <assert.h>
#include <jni.h>
#include <string.h>
#include <sys/types.h>
#include "platinum-jni.h"
#include "Platinum.h"
#include <android/log.h>
/*----------------------------------------------------------------------
| logging
+---------------------------------------------------------------------*/
NPT_SET_LOCAL_LOGGER("platinum.android.jni")
/*----------------------------------------------------------------------
| functions
+---------------------------------------------------------------------*/
__attribute__((constructor)) static void onDlOpen(void)
{
}
/*----------------------------------------------------------------------
| JNI_OnLoad
+---------------------------------------------------------------------*/
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
NPT_LogManager::GetDefault().Configure("plist:.level=FINE;.handlers=ConsoleHandler;.ConsoleHandler.outputs=2;.ConsoleHandler.colors=false;.ConsoleHandler.filter=59");
return JNI_VERSION_1_4;
}
/*
* Class: com_plutinosoft_platinum_UPnP
* Method: _init
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_com_plutinosoft_platinum_UPnP__1init(JNIEnv *env, jclass)
{
NPT_LOG_INFO("init");
PLT_UPnP* self = new PLT_UPnP();
return (jlong)self;
}
/*
* Class: com_plutinosoft_platinum_UPnP
* Method: _start
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_com_plutinosoft_platinum_UPnP__1start(JNIEnv *, jclass, jlong _self)
{
NPT_LOG_INFO("start");
PLT_UPnP* self = (PLT_UPnP*)_self;
return self->Start();
}
/*
* Class: com_plutinosoft_platinum_UPnP
* Method: _stop
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_com_plutinosoft_platinum_UPnP__1stop(JNIEnv *, jclass, jlong _self)
{
NPT_LOG_INFO("stop");
PLT_UPnP* self = (PLT_UPnP*)_self;
return self->Stop();
}
MediaRendererTest.cpp
#include "PltUPnP.h"
#include "PltMediaRenderer.h"
#include <stdlib.h>
/*----------------------------------------------------------------------
| globals
+---------------------------------------------------------------------*/
struct Options {
const char* friendly_name;
} Options;
/*----------------------------------------------------------------------
| PrintUsageAndExit
+---------------------------------------------------------------------*/
static void
PrintUsageAndExit(char** args)
{
fprintf(stderr, "usage: %s [-f <friendly_name>]\n", args[0]);
fprintf(stderr, "-f : optional upnp server friendly name\n");
fprintf(stderr, "<path> : local path to serve\n");
exit(1);
}
/*----------------------------------------------------------------------
| ParseCommandLine
+---------------------------------------------------------------------*/
static void
ParseCommandLine(char** args)
{
const char* arg;
char** tmp = args+1;
/* default values */
Options.friendly_name = NULL;
while ((arg = *tmp++)) {
if (!strcmp(arg, "-f")) {
Options.friendly_name = *tmp++;
} else {
fprintf(stderr, "ERROR: too many arguments\n");
PrintUsageAndExit(args);
}
}
}
/*----------------------------------------------------------------------
| main
+------------------------------------------------------------