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版的即时通信软件的加密机制,并开始制定群文件的加密方案!!!!

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

                 

原文地址:https://www.cnblogs.com/zengjiqiang/p/6581974.html