2013-03-11 60 views
5

我需要在android 4.1設備上安裝iw無線包。但我不知道如何以及要安裝的軟件包的版本是什麼!編譯並構建android 4.1設備的「iw」?

也是它需要linux平臺來做到這一點,或者它是足夠建立和安裝在adb外殼爲android生根裝置。

我看到這個 link,但是當我從adb終端做到這一點時,我看到了那個git和一些沒有找到的shell?怎麼做 ?

好像沒人有什麼想法?

+0

你在那個頁面上試過二進制文件嗎?如果你想從設備本身進行編譯,它會變得更加困難。當然,默認情況下並未安裝git。 – kabuko 2013-03-11 20:25:29

+0

@kabuko你是什麼意思的二進制?也如果我試圖讓Ubuntu的終端上工作,我需要安裝android sdk,但如果我只編譯它在Ubuntu機器上的設備如何支持此功能android sdk? – Hana90 2013-03-11 20:29:19

回答

1

在構建iw 3.11版本(已經有Android.mk文件)的同時,由於丟失/錯誤的頭文件和庫,我遇到了一些問題。由於它具有Android.mk文件,因此可以使用NDK。

在下面我將承擔如下:

  • 的設備,像以前(至少應該是可用的內核頭文件和libnl-2靜態庫)建成。我爲i9300構建了CyanogenMod 10(內核3.0.something),更新了下面的路徑以反映這一點。
  • NDK安裝到~/android/system/ndk
  • NDK安裝了適當的平臺和工具鏈。

    ln -s . jni 
    ln -nsv ~/android/system/external ./ 
    

    下一個問題就是網絡鏈路庫:

    In file included from external/libnl-headers/netlink/genl/genl.h:15:0, 
           from /tmp/and/iw/jni/iw.c:17: 
    external/libnl-headers/netlink/netlink.h:27:29: fatal error: linux/genetlink.h: No such file or directory. 
    

    只需在創建一個鏈接到android/system/out/target/product/i9300/obj/KERNEL_OBJ/usr/include/linux中斷其它頭嚴重提取iw-3.11.tar.xz和改變我的目錄之後

準備會出現如下錯誤:

Compile thumb : iw <= iw.c 
In file included from /home/user/android/system/ndk/platforms/android-14/arch-arm/usr/include/net/if.h:28:0, 
       from /tmp/and/iw/jni/iw.c:10: 
/tmp/and/iw/jni/linux/if.h:178:19: error: field 'ifru_addr' has incomplete type 
/tmp/and/iw/jni/linux/if.h:179:19: error: field 'ifru_dstaddr' has incomplete type 
/tmp/and/iw/jni/linux/if.h:180:19: error: field 'ifru_broadaddr' has incomplete type 
/tmp/and/iw/jni/linux/if.h:181:19: error: field 'ifru_netmask' has incomplete type 
/tmp/and/iw/jni/linux/if.h:182:20: error: field 'ifru_hwaddr' has incomplete type 
In file included from external/libnl-headers/netlink/netlink.h:20:0, 
       from external/libnl-headers/netlink/genl/genl.h:15, 
       from /tmp/and/iw/jni/iw.c:17: 
/home/user/android/system/ndk/platforms/android-14/arch-arm/usr/include/sys/socket.h:74:44: warning: 'struct msghdr' declared inside parameter list [enabled by default] 
/home/user/android/system/ndk/platforms/android-14/arch-arm/usr/include/sys/socket.h:74:44: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default] 
/home/user/android/system/ndk/platforms/android-14/arch-arm/usr/include/sys/socket.h:75:38: warning: 'struct msghdr' declared inside parameter list [enabled by default] 
In file included from external/libnl-headers/netlink/netlink.h:25:0, 
       from external/libnl-headers/netlink/genl/genl.h:15, 
       from /tmp/and/iw/jni/iw.c:17: 
/tmp/and/iw/jni/linux/netlink.h:33:2: error: unknown type name 'sa_family_t' 
In file included from external/libnl-headers/netlink/genl/genl.h:15:0, 
       from /tmp/and/iw/jni/iw.c:17: 
external/libnl-headers/netlink/netlink.h:51:16: warning: 'struct msghdr' declared inside parameter list [enabled by default] 
external/libnl-headers/netlink/netlink.h:54:19: warning: 'struct iovec' declared inside parameter list [enabled by default] 
make: *** [/tmp/and/iw/obj/local/armeabi/objs/iw/iw.o] Error 1 

一種解決方法是創建linux目錄,並把一個符號鏈接~/android/system/out/target/product/i9300/obj/KERNEL_OBJ/usr/include/linux/genetlink.h它:

mkdir -p linux 
ln -svn ~/android/system/out/target/product/i9300/obj/KERNEL_OBJ/usr/include/linux/genetlink.h linux/ 

最後修補Android.mk完成連接到網絡鏈路庫:

sed "/LOCAL_LDFLAGS/s#\$# -L$HOME/android/system/out/target/product/i9300/obj/STATIC_LIBRARIES/libnl_2_intermediates -lnl_2#" -i Android.mk 

現在構建可開始:

NDK_PROJECT_PATH=$PWD ~/android/system/ndk/ndk-build TARGET_PLATFORM=android-14 

它不會完成,因爲netlink /genl/genl.h找不到,但二進制文件在libs/armeabi中可用!

+0

供需要genetlink.h的任何人使用...無論出於何種原因,對於NDK R10e,它都可以在GNU STL的API級別21版本下使用。我使用的是API級別17版本,所以我只是將它從另一個複製到我的安裝。 – dadude999 2015-09-18 17:40:55