• 20170319总结


    最近主要工作内容:

         (1)JNI(Java native interface ):Java本地开发接口

                JNI的作用就相当于Java和C(C++)之间的桥梁,也是一种协议,它提供了转调函数是Java和C能够互相调用

         (2)NDK:(本地开发工具包)将C语言编译成so文件

                 1.安装过程:在Android Studio中进入Settings->Plugins搜索NDK,下载安装(安装完毕重启AS)

                 2.配置环境PATH:NDK的根目录----->ndk-build

                 3.NDK与AS关联:1). local.properties中添加配置ndk.dir=G:\android-ndk-r10
                                         2). gradle.properties中添加配置 android.useDeprecatedNdk=true

                4.编写native方法:
                                      public class JNIS {
                                                public native String helloJNI();
                                      }

              

               5.定义对应的JNI

                                 1). 在main下创建jni文件夹  

                                 2). 生成native方法对应的JNI函数声明头文件: 命令窗口中(在AS中的Terminal), 进入java文件夹    

                                                执行命令: javah com.atguigu.jnitests2.JNIS    

                                                生成头文件: com_atguigu_jnitests2_JNIS.h    

                                                函数声明(在C文件中声明): JNIEXPORT jstring JNICALL Java_com_atguigu_jnitests2_JNIS_helloJNI(JNIEnv *, jobject);  

                                3). 将生成的头文件转移到jni文件夹下  

                                4). 在jni下定义对应的函数文件: test.c  

                                          #include "com_atguigu_jnitests2_JNIS.h"   

                                          JNIEXPORT jstring JNICALL Java_com_atguigu_jnitests2_JNIS_helloJNI(JNIEnv * env, jobject jobj) {     

                                                      return (*env)->NewStringUTF(env, "Hello from C");   

                                         }  

                             5). 在jni文件夹下创建一个空的C文件: empty.c   说明: 这是AS的bug, 必须至少2个C文件才能通过编译(2.1版本不需要)

               6.指定编译的不同CPU ,在build.gradle中声明  

                           defaultConfig {       

                                   ndk{          

                                            moduleName "HelloJni" //so文件: lib+moduleName+.so          

                                            abiFilters "armeabi", "armeabi-v7a", "x86" //cpu的类型       

                                   }  

                           }

             7. 编译生成不同平台下的动态链接文件  

                               1). 执行rebuild, 生成so文件  

                               2). so文件目录: buildintermediates dkdebuglib.....

            8. 调用native方法:  

                             1). 在native方法所在的类中加载so文件    

                                    static {          

                                               System.loadLibrary("HelloJni");      

                                   }  

                            2). 在MainActivity中调用native方法:    

                                         String result = new JNIS().helloJNI();        

                                         Log.e("TAG", "result="+result);

        (3)C调用java需要获取方法签名

                  1.进入应用的build->intermediates->debug,按住Shift和鼠标右键进入命令行

                  2.执行javap -s JNI全类名,将显示所有方法的签名信息

       (4)调用百度云推送编写类似于微信的通信应用,目前如何加好友还未搞懂,接下来将主要在自己服务器上部署 服务器与客户端之间的通信,并继续深入了解该应用的架构和代码。

        (5)看了数据结构与算法,初步了解数据结构,主要分为逻辑结构和物理结构

                           逻辑结构:1)集合结构 

                                          2)线性结构:数据元素之间是一对一的关系

                                         3)树形结构:一对多的关系

                                         4)图形结构:多对多的关系

                          物理结构:指数据的逻辑结构在计算机中的存储形式

                                        1)顺序存储结构:把数据元素存放在地址连续存储单元里

                                         2)把数据元素存放在任意的存储单元里,这组存储单元可以是连续的也可以是不连续的。

     下一阶段主要的工作:

                    掌握百度云推送机制,模仿百度云推送实现一个服务器与客户端的心跳连接方式;

                    继续学习算法,

                    掌握PC版的即时通信软件的加密机制,并开始制定群文件的加密方案!!!!

                                                                先制定这么多吧,也不知道能实现多少,有点坐耐不住,南无阿弥陀佛!!!!!

                     

  • 相关阅读:
    sqlalchemy 转json 的几种常用方式
    程序员的思维模型指南
    软件的本质
    Python数据模型及Pythonic编程
    Linux Kernel C语言编程范式
    U-Boot内存管理
    Linux网络文件系统的实现与调试
    Linux内核内存管理架构
    Linux多核并行编程关键技术
    Go/Python/Erlang编程语言对比分析及示例
  • 原文地址:https://www.cnblogs.com/zengjiqiang/p/6581974.html
Copyright © 2020-2023  润新知