NDK開(kāi)發(fā)之Java-C互相傳值

CSDN鏈接? ? 在平時(shí)的NDK開(kāi)發(fā)中地熄,我們通常使用C/C++封裝好so庫(kù)晰筛,然后客戶(hù)端調(diào)用so庫(kù)以完成我們的需求,在上一遍入門(mén)中(NDK開(kāi)發(fā)之初入門(mén)-Hello Word)我們?cè)赟o庫(kù)方法中實(shí)現(xiàn)返回字符串Hello Word骤竹,然后在Java中進(jìn)行調(diào)用so庫(kù)中實(shí)現(xiàn)好的方法尿贫,以達(dá)到我們的需求,那么如果我們需要在C/C++中調(diào)用Java中的方法時(shí)溶推,該如何實(shí)現(xiàn)呢?或者在C/C++中修改Java中的數(shù)值徊件,該如何實(shí)現(xiàn)呢?


一.C/C++中修改Java中的成員變量

1.首先我們?cè)贘ava中定義一個(gè)成員變量key蒜危,public String key="voyageSun";我們的目的是修改當(dāng)前key的值虱痕,不過(guò)是使用C/C++進(jìn)行修改。下圖中我們定義了一個(gè)字符串key辐赞,加載了一個(gè)so庫(kù)部翘,accessField是C中具體功能的實(shí)現(xiàn)方法

Java中調(diào)用so庫(kù)實(shí)現(xiàn)類(lèi)

2.看我們C/C++中具體實(shí)現(xiàn)

C中實(shí)現(xiàn)修改Java字符串的代碼

首先拿到j(luò)class,就是我們java中實(shí)現(xiàn)類(lèi)的class文件,然后拿到屬性id响委,我們將根據(jù)這個(gè)屬性拿到需要修改的字符串量新思,GetFieldID有四個(gè)參數(shù),前兩個(gè)不需要解釋?zhuān)謩e傳入JNIEnv和jclass赘风,第三個(gè)參數(shù)是我們獲取Java中字符串的key值夹囚,我們定義的字符串為public String key,在傳入key邀窃,若我們定義的字符串為public String TestString荸哟,那么傳入的就是TestString,此處傳入的就是變量名稱(chēng)瞬捕,第四個(gè)參數(shù)傳入的變量簽名鞍历,具體參照下圖Java屬性與方法簽名列表,若我們需要獲取的數(shù)據(jù)類(lèi)型是int肪虎,那么該處需要傳入的參數(shù)為"I",現(xiàn)在我們獲取的是String類(lèi)型的變量劣砍,那么需要傳入的就是Ljava/lang/String;(注:后面必須添加;)扇救。獲取到該id后刑枝,然后根據(jù)id拿到Java中對(duì)應(yīng)的字符串,在C中修改字符串迅腔,修改完成后返回仅讽。其中核心思想就相當(dāng)于我們平時(shí)用到的反編譯。

Java屬性與方法簽名列表

3.編譯生成so庫(kù)钾挟,然后在Activity中調(diào)用該方法洁灵,會(huì)發(fā)現(xiàn)我們的字符串String已發(fā)生變化

調(diào)用so庫(kù)效果圖

我們?cè)陬?lèi)中定義字符串key="voyageSun",然后在C中進(jìn)行修改掺出,添加前綴super徽千,這樣就實(shí)現(xiàn)了在C中修改Java代碼得效果。


二.C/C++中修改Java中的靜態(tài)成員變量

套路還是一樣的汤锨,在Java中聲明靜態(tài)成員變量public static int count=1;双抽,在C中修改其值,具體實(shí)現(xiàn)方法直接貼出來(lái)了

C中修改Java中的靜態(tài)成員變量方法

三.C/C++中修改Java中的方法闲礼,既然可以修改Java中的變量牍汹,那么可以修改Java方法嗎铐维?肯定可以,我們?cè)贘ava中定義一個(gè)方法public int getTestInt(int max){return max;}慎菲,C中對(duì)其進(jìn)行修改

c中修改java方法示例

通過(guò)上面的示例嫁蛇,我們發(fā)現(xiàn)可以調(diào)用C來(lái)實(shí)現(xiàn)修改Java代碼的目的,這樣Java調(diào)用C實(shí)現(xiàn)功能露该,C修改Java中代碼功能都可以實(shí)現(xiàn)了睬棚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市解幼,隨后出現(xiàn)的幾起案子抑党,更是在濱河造成了極大的恐慌,老刑警劉巖撵摆,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件底靠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡特铝,警方通過(guò)查閱死者的電腦和手機(jī)苛骨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苟呐,“玉大人痒芝,你說(shuō)我怎么就攤上這事∏K兀” “怎么了严衬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)笆呆。 經(jīng)常有香客問(wèn)我请琳,道長(zhǎng),這世上最難降的妖魔是什么赠幕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任俄精,我火速辦了婚禮,結(jié)果婚禮上榕堰,老公的妹妹穿的比我還像新娘竖慧。我一直安慰自己,他們只是感情好逆屡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布圾旨。 她就那樣靜靜地躺著,像睡著了一般魏蔗。 火紅的嫁衣襯著肌膚如雪砍的。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天莺治,我揣著相機(jī)與錄音廓鞠,去河邊找鬼帚稠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛床佳,可吹牛的內(nèi)容都是我干的滋早。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼夕土,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼馆衔!你這毒婦竟也來(lái)了瘟判?” 一聲冷哼從身側(cè)響起怨绣,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拷获,沒(méi)想到半個(gè)月后篮撑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匆瓜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年赢笨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驮吱。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茧妒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出左冬,到底是詐尸還是另有隱情桐筏,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布拇砰,位于F島的核電站梅忌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏除破。R本人自食惡果不足惜牧氮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瑰枫。 院中可真熱鬧踱葛,春花似錦、人聲如沸光坝。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)教馆。三九已至逊谋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間土铺,已是汗流浹背胶滋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工板鬓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人究恤。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓俭令,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親部宿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抄腔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354