2012-03-24 34 views
0

功能,我只是一個NDK教程中,我發現瞎搞。本機代碼使用一個「包」,而活動在另一箇中。發生這種不匹配時,我不能調用本地函數而不會得到不滿意的鏈接異常。我知道「爲什麼」我只是不知道決議。的Android - JNI調用本地從不同的包

下面是示例代碼名爲.c,我已經放在我的JNI文件夾:

#include <string.h> 
#include <jni.h> 

jstring Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { 
    return (*env)->NewStringUTF(env, "Hello from native code!"); 
} 

注意,這.C代碼的包轉換爲com.mindtherobot.samples.ndkfoo.NdkFooActivity

如果我創建相匹配的包/類的新活動,我可以調用invokeNativeFunction就好了。但是,如果我不能匹配它呢?相反,我需要從com.mydomain.activity運行它呢?

我想我可能會改變周圍的東西,這樣我的家鄉聲明是這樣的:

package com.mydomain; 

public class Activity { 
    private native String com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(); 
} 

但是,這是一個不走。只是要清楚,我知道如何,如果我改變我的包匹配什麼是在.C代碼編譯,使這項工作;然而,我需要能夠從不同的包中調用一個方法......這可能嗎?

回答

1

你需要做一個基本的類談話C,不活動的唯一功能。隨後的活動可以實例化這個類,甚至可能是靜態地調用它,每當他們需要跟C.

0

你的問題是相當擾碼,但在Java源代碼包聲明有什麼被編碼成同意本地方法名稱,即它必須與javah生成的內容一致。如果你在Java代碼更改包,則必須重新生成.h文件,並調整.c文件,以適應。沒有其他的方法來解決這個問題。

相關問題