linux怎么查看本机内存大小
284
2022-09-02
Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(三) APK 实现篇
Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(一) 理论篇
Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(二) C++实现篇
上两篇文件已经可以实现一个C++的来电归属地查询了,这次我们要把它整合到Android项目中。
1.Jni
如果你不熟悉jni的话,可以先阅读下面文章来更好地了解jni。
Android Jni 例子,ndk
如果你没有Linux Android代码环境的话,要参考下这篇文章 window下eclipse搭建android ndk环境
先看下项目结构:
如果你有Linux Android 源码环境的话,请下载这个CallHelper项目,复制到packages/apps/ 下。
没有的话参考window下eclipse搭建android ndk环境进行编译。
先看下APK的make文件:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := $(call all-java-files-under, src)# apk nameLOCAL_PACKAGE_NAME := CallHelperLOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)LOCAL_JNI_SHARED_LIBRARIES := libphone-number-jni# so can call jni/Android.mkinclude $(call all-makefiles-under,$(LOCAL_PATH))
主要是最后一条,如果你在Linux 的终端执行 mmm packages/apps/CallHelper 时除了会生成CallHelper.apk外还会去编译jni/Android.mk 在类似out\target\product\sp8825ea\system\lib生成libphone-number-jni.so 文件。
再看下jni/Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optional# the .so file name, remember need lib in the frontLOCAL_MODULE := libphone-number-jni# the main cpp file nameLOCAL_SRC_FILES := number-jni.cpp LOCAL_PRELINK_MODULE := falseinclude $(BUILD_SHARED_LIBRARY)
再看下jni/number-jni.cpp
#include
jni/NumberInfo.h 就不列出来了。去掉了把txt转换成二进制文件的方法就留了查询方法。
最后看下src/com.waitingfy.callhelper/NativeFunction.java
package com.waitingfy.callhelper;public class NativeFunction { //方法前有native 关键词,这里的getLocationFromJni跟jni/number-jni.cpp中的遥相呼应 public static native byte[] getLocationFromJni(String filename,String number); /** Load jni .so on initialization */ static { System.loadLibrary("phone-number-jni");//注:不需要lib开头和.so结束,只需要中间的名字 }}
src/com.waitingfy.callhelper/GetLocationByNumber.java 就不列出来了,下载整个项目查看
中有方法把AreaData.dat 复制到/data/data/com.waitingfy.callhelper/files 中
还有过滤搜索号码,因为我们只支持小于等于7位的查询。所以一个完整的电话号码或者手机号码要先进行处理,还要考虑去掉+86,等。
还有把byte[] 转换成String的方法,主要为了处理中文乱码问题,可以参考文章android jni 中文乱码
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~