AM ● -a: 指定Intent action, 实现原理Intent.setAction(); ● -n: 指定组件名,格式为{包名}/.{主Activity名},实现原理Intent.setComponent(); ● -d: 指定Intent data URI ● -t: 指定Intent MIME Type ● -c[-c] ...]:指定Intent category,实现原理Intent.addCategory() ● -p: 指定包名,实现原理Intent.setPackage(); ● -f: 添加flags,实现原理Intent.setFlags(int ),紧接着的参数必须是int型;
基本类型
参数-e/-es-esn-ez-ei-el-ef-eu-ecn类型String(String) null boolean int long float uri component
比如参数es是Extra String首字母简称,实例:
intent.putExtra("website","website gityuan.com")
am start -n com.mi.app/.MainActivity -es website gityuan.com
比如参数efal,是Extra float Array List首字母简称,多个value值之间以逗号隔开,实例:
am start -n com.mi.app/.MainActivity -efal nums 1.2,2.2
此处-es website gityuan.com,等价于Intent.putExtra(“website”, “gityuan.com”);
在JNI种使用execlp方法去启动一个activity。
execlp("am","am","start","-a","android.intent.action.VIEW","-d"
,"http://www.baidu.com") 第一个am代表目录,这样去打开浏览器
MakeFile
在Linux环境编译,在Android中用来生成.so工具
文件目录:
使用gcc编译so最原始的方法:
1:首先要把.c文件编译成.o文件
gcc -c main.c
gcc -c plus.c
会得到一个main.o和plus.o的文件
2:把.o文件编译成.so文件
gcc main.o -o main 得到main.so
这样很麻烦,使用makefile来编译(其实还是使用的gcc)
首先创建一个Makefile文件(必须这个名字)
方式一:
空格是TAB键
方式二:
OBJECTS定义一个变量, $^代表依赖文件 就是A.c b.cpp等 $@代表目标文件即生成的.o文件
方式三:
OBJECTS是.o文件的集合,怎么得到.o文件呢?就是把.c文件的后缀改成.o
在SOURCES中把.c文件替换成.o
定义自己的变量:
使用make test 输出结果:10 20 因为是$2 $1 如果是$1 $2 结果就是20 10
递归展开式:
变量写在下面照样能输出结果,如果在写一个str1=helloworld,结果也会被改变。
直接展开:
如果把str3申明在str4下面,就显示空白
使用ifeq作为条件判断语句
CMakeLists:
使用CMakeLists编译so库,首先创建目录结构
在src中放入.c和.cpp源文件,include中放入.h头文件
CMakeLists.txt必须这个名字
首先必须要有最小版本号,字母可以小写。然后就可以编译so了
先要安装CMake:在build目录下执行 需要root权限,我的是centerOS环境
yum install CMake
如果没有安装g++就执行CMake..会报一个your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found的异常
安装g++:
yum install gcc-c++
这之后再执行CMake..会在build目录下生成一堆文件
自动帮我们生成好了Makefile,然后像Makefile那样执行make命令就编译成功拉。
语法:
1:变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值
2:command (args ...) #命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格
3: set(var a;b;c) <=> set(var a b c) #定义变量var并赋值为a;b;c这样一个string list
4: Add_executable(${var}) <=> Add_executable(a b c) #变量使用${xxx}引用
5:条件语句:if(var) #var 非empty 0 N No OFF FALSE... #非运算使用NOT
if(var) #var 非empty 0 N No OFF FALSE... #非运算使用NOT
…
else()/elseif() … endif(var)
6: 循环语句
Set(VAR a b c)
Foreach(f ${VAR}) …Endforeach(f)
WHILE() … ENDWHILE()
内部变量:
CMAKE_C_COMPILER:指定C编译器
CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项
EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径
LIBRARY_OUTPUT_PATH:库文件路径
CMAKE_BUILD_TYPE::build 类型(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug
BUILD_SHARED_LIBS:Switch between shared and static libraries
命令:
project (HELLO) #指定项目名称,生成的VC项目的名称;
>>使用${HELLO_SOURCE_DIR}表示项目根目录
include_directories:指定头文件的搜索路径,相当于指定gcc的-I参数
>> include_directories (${HELLO_SOURCE_DIR}/Hello) #增加Hello为
include目录
link_directories:动态链接库或静态链接库的搜索路径,相当于gcc的-L参数
>> link_directories (${HELLO_BINARY_DIR}/Hello) #增加Hello为link
目录
add_subdirectory:包含子目录
>> add_subdirectory (Hello)
add_executable:编译可执行程序,指定编译,好像也可以添加.o文件
>> add_executable (helloDemo demo.cxx demo_b.cxx) #将cxx编译
成可执行文件——
add_definitions:添加编译参数
>> add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义;
>> add_definitions( “-Wall -ansi –pedantic –g”)
target_link_libraries:添加链接库,相同于指定-l参数
>> target_link_libraries(demo Hello) #将可执行文件与Hello连
接成最终文件demo
add_library:
>> add_library(Hello hello.cxx) #将hello.cxx编译成静态库如libHello.a
#在指定目录下搜索一个库, 保存在变量MY_LIB中
find_ibrary(MY_LIB libmylib.a ./)
link_libraries( lib1 lib2 ...): All targets link with the same set of libs