JNI——AM和 MakeFile

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容