[問題] 請問如何調用沒有.h以及lib的so library?

作者: ruthertw (小葉老大)   2017-11-27 13:43:55
幫朋友請教:
我朋友接手已離開公司工程師的專案壓縮檔,
他解完壓縮,
Android Studio打不開這個專案,
libs裡面有幾個so檔案,
但是裡面完全沒有任何.h以及C/C++ library的source codes.
他打電話給這位離職工程師,
離職工程師說他離職時已經刪掉所有公司的檔案,
且so裡面混雜著native和jni的functions,
離職工程師表示他重建不了這些source codes.
我朋友查過這三年內的網上所有有關load so library教學文章,
發現沒有一篇是可以不加.h以及相關library,
就可以直接load so library到Android Studio專案裡...
但是android studio改版這麼多次,
我朋友懷抱著希望,
想請問有甚麼方式可以讓android studio可以直接add so library嗎?
作者: ssccg (23)   2017-11-27 14:18:00
JNI要有java端的介面(有關鍵字native的method),跟so裡面的JNI function有對應正確就可以用,不用.h或其他libraryso檔直接放在jniLibs裡,執行時就能用System.loadLibrary至於你說的load so library到Android Studio專案不知道是指什麼,source當然是看不到的
作者: ruthertw (小葉老大)   2017-11-27 14:36:00
幫朋友問,如何調用so裡面的非jni funcitons?
作者: lnmlee   2017-11-27 14:36:00
應該是用別人編譯完的so檔開發的 所以沒有原始碼很正常。接手應該只是要沿用so lib檔而已
作者: ruthertw (小葉老大)   2017-11-27 14:54:00
譬如原so裡有一個int abc(),怎麼在Android studio調用?全部都要手動一個一個轉換成jni形式?沒有source codes..
作者: ssccg (23)   2017-11-27 18:26:00
非jni function不能從java直接呼叫,要寫個jni function去呼叫,然後這個jni function的native code要有.h才能build不用是原始的,知道有int abc()就自己寫個.h寫進去啊不過這大概就算是你所謂的手動轉換吧
作者: y3k (激流を制するは静水)   2017-11-27 19:10:00
是可以用obj dump的方式知道so裡面有什麼函式下去跑 但是很難XD
作者: ruthertw (小葉老大)   2017-11-27 19:25:00
感覺很痛苦,只要一個型態對錯就整個大亂!請問有沒有更完善的方法,對岸強人是說數量太多,乾脆放棄
作者: now99 (陳在天)   2017-11-27 20:31:00
NDK
作者: zop (ㄞ肝ㄞ肝~一元二十罐~)   2017-11-28 17:44:00
我第一個想法是,這公司對員工應該很差 XDDD
作者: ruthertw (小葉老大)   2017-11-30 13:51:00
build system 可以為你處理許多細節,例如:你不許要在Android.mk 文件中列出頭文件或者其他的依賴關係blog.csdn.net/doublefi123/article/details/38925083這是對岸說的,但不知道怎麼能不用"頭文件"?目前是連"C和C++源文件的列表"也都沒有呀... @[email protected]~
作者: james732 (好人超)   2017-11-30 18:24:00
objdump只能解symbol name但應該無法得知參數與回傳值?

Links booklink

Contact Us: admin [ a t ] ucptt.com