本文章将演示如何使用NDK编译生成可执行程序启动Android手机浏览器并打开指定网页。

目录结构:

[D]—-jni
[f]——–exec.c
[f]——–Android.mk

其中exec.c源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <unistd.h>
int main(void) {
printf("main()start\n");
// am:指定执行am命令
// am:系统参数要求,一般为启动的命令名称。还记得main() argv中第一个参数的含义吗?
// start -a android.action
// -d : URI_DATA -n:指定解析的package/component
execlp("am", "am", "start", "-a", "android.intent.action.VIEW", "-d", "http://qq.com", "-n", "com.android.browser/.BrowserActivity", NULL);
printf("This code will not been print.\n");
return 0;
}

代码中通过调用Android系统中的am命令,通过-a-d-n指明事件、uri、处理组件名,达到通过系统浏览器打开qq网页的目的。(ps:手机中浏览器的包名及组件不一定是com.android.browser/.BrowserActivity,可以自定义,也可以删除-ncom.android.browser/.BrowserActivity信息)。

1
2
3
4
5
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := exec_am
LOCAL_SRC_FILES := exec.c
include $(BUILD_EXECUTABLE)

在命令行终端进入jni的父文件夹,执行ndk-build进行编译,则在libs文件夹下生成exec_am文件。
通过adb命令将exec_ampush到/data/local下,并执行,查看手机屏幕会出现系统浏览器并打开qq网页。效果如下:

1
2
3
shell@android:/data/local $ ./exec_am
main()start
Starting: Intent { act=android.intent.action.VIEW dat=http://qq.com cmp=com.android.browser/.BrowserActivity }