在網路看到有人有NDK寫一個可執行的程式,感覺很有趣,馬上就來實驗看看
我們以NDK下面的hello-jni當範例
1.修改hello-jni.c
$(NDK)\apps\hello-jni\project\jni\hello-jni.c
將下面這段程式碼加在原程式碼的下面
[code]
#include "stdio.h"
int main()
{
printf("hello world!")
return 0;
}
[/code]
2.修改Android.mk
$(NDK)\apps\hello-jni\project\jni\Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
#include $(BUILD_SHARED_LIBRARY)
include $(BUILD_EXECUTABLE) //加入此行,指出此為一個可執行檔
//修改好後,馬上進行編譯
$ make APP=hello-jni
Android NDK: Building for application 'hello-jni'
Compile thumb : hello-jni <= apps/hello-jni/project/jni/hello-jni.c
apps/hello-jni/project/jni/hello-jni.c:37:2: warning: no newline at end of file
Executable : hello-jni
Install : hello-jni => apps/hello-jni/project/libs/armeabi
//編譯OK,看看我門生出啥東西來
Administrator@mychat-53bb70c5 /cygdrive/d/android-ndk-1.6_r1/apps/hello-jni/project/libs/armeabi
$ dir
hello-jni libhello-jni.so
//開啟模擬器
D:\android-sdk-windows\tools>android list avd
Available Android Virtual Devices:
Name: adv_Android1.6
Path: C:\Documents and Settings\Administrator\.android\avd\adv_Android1.6.avd
Target: Android 1.6 (API level 4)
Skin: HVGA
---------
Name: Android1.6
Path: C:\Documents and Settings\Administrator\.android\avd\Android1.6.avd
Target: Android 1.6 (API level 4)
Skin: HVGA
D:\android-sdk-windows\tools>emulator @adv_Android1.6
//使用adb Shell將我們生成的可執行檔丟到模擬器上
D:\android-ndk-1.6_r1\apps\hello-jni\project\libs\armeabi>adb push hello-jni /data/hello-jni
205 KB/s (0 bytes in 3284.000s)
//利用adb 的shell命令進入模擬器的Shell
D:\android-ndk-1.6_r1\apps\hello-jni\project\libs\armeabi>adb shell
# cd /data
cd /data
# ls -l
ls -l
-rw-rw-rw- root root 3284 2010-07-08 09:45 hello-jni
-rwxrwxrwx root root 3282 2010-07-08 09:13 HelloWorld
drwxrwx--x system system 2009-11-24 22:06 app
drwxrwx--t system misc 2010-06-25 06:34 misc
drwxrwx--x shell shell 2010-06-25 06:34 local
drwxrwx--x system system 2010-06-25 06:34 data
drwxrwx--x system system 2010-06-25 06:34 app-private
# chmod 777 hello-jni
chmod 777 hello-jni
# ./hello-jni
./hello-jni
Hello World!
我們以NDK下面的hello-jni當範例
1.修改hello-jni.c
$(NDK)\apps\hello-jni\project\jni\hello-jni.c
將下面這段程式碼加在原程式碼的下面
[code]
#include "stdio.h"
int main()
{
printf("hello world!")
return 0;
}
[/code]
2.修改Android.mk
$(NDK)\apps\hello-jni\project\jni\Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
#include $(BUILD_SHARED_LIBRARY)
include $(BUILD_EXECUTABLE) //加入此行,指出此為一個可執行檔
//修改好後,馬上進行編譯
$ make APP=hello-jni
Android NDK: Building for application 'hello-jni'
Compile thumb : hello-jni <= apps/hello-jni/project/jni/hello-jni.c
apps/hello-jni/project/jni/hello-jni.c:37:2: warning: no newline at end of file
Executable : hello-jni
Install : hello-jni => apps/hello-jni/project/libs/armeabi
//編譯OK,看看我門生出啥東西來
Administrator@mychat-53bb70c5 /cygdrive/d/android-ndk-1.6_r1/apps/hello-jni/project/libs/armeabi
$ dir
hello-jni libhello-jni.so
//開啟模擬器
D:\android-sdk-windows\tools>android list avd
Available Android Virtual Devices:
Name: adv_Android1.6
Path: C:\Documents and Settings\Administrator\.android\avd\adv_Android1.6.avd
Target: Android 1.6 (API level 4)
Skin: HVGA
---------
Name: Android1.6
Path: C:\Documents and Settings\Administrator\.android\avd\Android1.6.avd
Target: Android 1.6 (API level 4)
Skin: HVGA
D:\android-sdk-windows\tools>emulator @adv_Android1.6
//使用adb Shell將我們生成的可執行檔丟到模擬器上
D:\android-ndk-1.6_r1\apps\hello-jni\project\libs\armeabi>adb push hello-jni /data/hello-jni
205 KB/s (0 bytes in 3284.000s)
//利用adb 的shell命令進入模擬器的Shell
D:\android-ndk-1.6_r1\apps\hello-jni\project\libs\armeabi>adb shell
# cd /data
cd /data
# ls -l
ls -l
-rw-rw-rw- root root 3284 2010-07-08 09:45 hello-jni
-rwxrwxrwx root root 3282 2010-07-08 09:13 HelloWorld
drwxrwx--x system system 2009-11-24 22:06 app
drwxrwx--t system misc 2010-06-25 06:34 misc
drwxrwx--x shell shell 2010-06-25 06:34 local
drwxrwx--x system system 2010-06-25 06:34 data
drwxrwx--x system system 2010-06-25 06:34 app-private
# chmod 777 hello-jni
chmod 777 hello-jni
# ./hello-jni
./hello-jni
Hello World!