• c++ 开发JNI


    c++ 开发JNI

    • C的预处理命令
    • #开头的就是c/c++的预处理命令
    • 在编译之前 先会走预编译阶段 预编译阶段的作用就是 把 include进来的头文件 copy到源文件中
    • define这些宏定义 用真实的值替换一下
    • #if #else #endif 该删除的删除掉

      • c++开发jni代码时 env不再是结构体Jninativeinterface的二级指针
    • _JNIEnv JNIEnv _JNIEnv 是C++的结构体 C++结构体跟C区别 C++的结构体可以定义函数
    • env 是JNIEnv的一级指针 也就是结构体_JNIEnv的一级指针 env-> 来调用 结构体里的函数
    • _JNIEnv的函数 实际上调用的就是结构体JNINativeInterface的同名函数指针
    • 在调用时第一个参数 env已经传进去了

    • C++的函数要先声明再使用 可以把javah生成的头文件include进来作为函数的声明

    • include的方法 <> “” “”
    • 如果用”” 来导入头文件 系统会先到 源代码所在的文件夹去找头文件 如果找不到再到系统指定的incude文件夹下找
    • //用<> 直接到系统指定的include目录下去找

    am 命令

    • am命令 :在adb shell里可以通过am命令进行一些操作 如启动activity Service 启动浏览器等等
    • am命令的源码在Am.java中, 在adb shell里执行am命令实际上就是启动一个线程执Am.java的main方法,am命令后面带的参数都会当作运行时的参数传递到main函数中
    • am命令可以用start子命令,并且带指定的参数
    • 常见参数: -a: action -d data -t 表示传入的类型 -n 指定的组件名字
    • 举例: 在adb shell中通过am命令打开网页
    • am start –user 0 -a android.intent.action.VIEW -d http://www.baidu.com
    • 通过am命令打开activity
    • am start –user 0 -n com.itheima.fork/com.itheima.fork.MainActivity
    • (系统sdk版本>16 需要加上–user 0 , <16不需要加)

    • execlp c语言中执行系统命令的函数

    • execlp() 会从PATH环境变量所指的目录中查找符合参数file的文件找到后就执行该文件, 第二个参数开始就是执行这个文件的 args[0],args[1] 最后一个参数用(char*)NULL结束
    • android开发中 execlp函数对应android的path路径为system/bin/目录
    • 调用格式

      execlp("am", "am", "start", "--user","0","-a", "android.intent.action.VIEW", "-d", "http://www.baidu.com", (char *) NULL);
      
      
      execlp("am", "am", "start", "--user","0", "-n" , "com.itheima.cforktest/com.itheima.cforktest.MainActivity",(char *) NULL);
      
  • 相关阅读:
    winform登录成功后打开主窗体的合理写法
    C#将字符串转换为整型的三种方法的总结
    win7下安装Oracle11g
    无法将文件“.exe”复制到“.exe”。文件“.exe”正由另一进程使用,因此该进程无法访问该文件
    GDI+
    “System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常
    winform中为ComboBox控件添加“请选择”或“全部”选项
    IE8不能上传、插入图片的解决办法!
    asp.net mvc实现上传文件
    winform关闭窗体时确认框提示两次
  • 原文地址:https://www.cnblogs.com/charleswone/p/10228761.html
Copyright © 2020-2023  润新知