Messaging短信源码导入AndroidStudio
文章目录
- 前言
- 一、导入源码
- 二、添加依赖
- 1.引入framework.jar
- 2.引入其他依赖
- 3.引入so库
- Apk签名
- 总结
前言
要对短信应用进行二次开发,之前也没有怎么搞过系统app这块,网上提供开发方式主要有两种,一种是在系统源码下修改然后通过mm命令进行编译,编译生成的apk再安装到手机上,这种方式配置没有那么麻烦,但是每一次开发和安装比较繁琐。另外一种就是导入到AndroidStudio进行开发,这种方式后面开发过程体验较好,只是前期环境配置比较麻烦。
一、导入源码
我下载的是Android11的源码,Messaging源码位置位于./packages/apps/Messaging下,按照平常开发流程增加App目录和gradle文件,分别将src和res等文件移植到到相应目录下。
二、添加依赖
1.引入framework.jar
下载/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar,新建目录ext_lib,在app目录下的build.gradle文件中引入
compileOnly files('ext_libs\\framework.jar')
在根目录build.gradle加入
allprojects {repositories {google()jcenter()}gradle.projectsEvaluated {tasks.withType(JavaCompile) {options.compilerArgs.add('-Xbootclasspath/p:app\\ext_libs\\framework.jar')}}
}
2.引入其他依赖
查看源码的Android.mk文件,发现还需要关联动态库androidx.appcompat:appcompat:1.1.0(直接引用),libchips 、 libphotoviewer(引入过程中发现最终只需要这几个), 静态库android-common、com.android.vcard、guava,android-common-framesequence,libphonenumber
LOCAL_STATIC_ANDROID_LIBRARIES := \androidx.core_core \androidx.media_media \androidx.legacy_legacy-support-core-utils \androidx.legacy_legacy-support-core-ui \androidx.fragment_fragment \androidx.appcompat_appcompat \androidx.palette_palette \androidx.recyclerview_recyclerview \androidx.legacy_legacy-support-v13 \colorpicker \libchips \libphotoviewerLOCAL_STATIC_JAVA_LIBRARIES := \androidx.annotation_annotation \android-common \android-common-framesequence \com.android.vcard \guava \libphonenumber
libchips 、 libphotoviewer中含有资源文件,直接引入相应的.jar文件还会报错,所以我直接去系统里面下载源码当作module进行引入。photoviewer源码位于./frameworks/opt/photoviewer/下,chips目录位于./frameworks/opt/chips/下
其他静态依赖可以在out/target/common/obj/JAVA_LIBRARIES/目录下查找如上需要的库
将引入的包都放进libs目录下,然后直接引用就可以了
implementation fileTree(dir: "libs", include: ["*.jar"])
3.引入so库
在使用过程中发现加载gif动态图会崩溃,提示找不到so库,后面发现android-common-framesequence中有个FrameSequence类里面需要加载libframesequence.so这个库
static {System.loadLibrary("framesequence");}
native代码在./frameworks/ex/framesequence/jni下,查看Android.mk文件需要依赖libgiflib.so和libwebp-decode.a文件
### include giflib as a prebuilt lib 使用动态链接库的方式 ###
include $(CLEAR_VARS)
LOCAL_MODULE := giflib-prebuilt
LOCAL_SRC_FILES := external/giflib/libgiflib.so
include $(PREBUILT_SHARED_LIBRARY)### include libwebp-decode as a prebuilt lib 使用静态链接库的方式 ###
include $(CLEAR_VARS)
LOCAL_MODULE := libwebp-decode-prebuilt
LOCAL_SRC_FILES := external/webp/libwebp-decode.a
include $(PREBUILT_STATIC_LIBRARY)
具体怎么编译可以查看编译使用Android源码中的GIF图片工具包,短信在发送gif图片时也出现了崩溃会提示GifTranscoder中giftranscode.so找不到,而libgiftranscode.so也是需要自己去编译,native代码就在Messaging目录下的jni目录下,这个编译过程跟framesequence编译过程一样,但是还要把引入giflib中的头文件,
再将头文件引入进来
LOCAL_C_INCLUDES := \external/giflib'
Apk签名
四组默认签名供Android.mk在编译APK使用:
1、testkey:普通APK,默认情况下使用。
2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。
3、shared:该APK需要和home/contacts进程共享数据。
4、media:该APK是media/download系统中的一环。
Messaging中LOCAL_CERTIFICATE := platform,签名使用platform.pk8 和 platform.x509.pem,下载keytool-importkeypair,将platform.pk8 和 platform.x509.pem 放在 keytool-importkeypair目录下执行
./keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform
然后在app里面引用签名就可以,但我目前在Android11可以直接运行,Android11默认短信应用为Messenger没有预装Messaging,在开发过程中可以直接运行。
总结
之前一直都是做互联网应用这块的,对系统app这快了解不多,但阅读整个源码下来发现还是有很多东西值得去学习的。
Messaging短信源码导入AndroidStudio相关推荐
- 网页短信后台开发 短息系统平台定制 web版定制 平台源码架构 短信源码开发升级接入SMPP通道
网页短信后台开发 短息系统平台定制 web版定制 平台源码架构 短信源码开发升级接入SMPP通道 WEB短信系统SMPP接入功能上线 接入SMPP通道所需要用到的技术 1:多线程 2:服务程序,并不是 ...
- 临时停车自动拨号发短信源码(新增背景版)
介绍: 临时停车自动拨号发短信源码(新增背景版) 修正了两处结束符号,增加了背景分为两套源码(检测到手机打开才会自动弹出)第一套:自动拨号访问自动弹到拨号界面,并自动输入手机号. 第二套:自动短信访问 ...
- php发送腾讯云变量短信源码,php结合腾讯云短信实现发送短信功能!(群发和单发都可以)...
namespace app\home\controller; use core\basic\Controller; use core\basic\Smsnotice; use app\home\mod ...
- 临时停车自动拨号发短信源码,亲测可用
介绍: 文本修改电话号码上传空间即可访问 分为两套源码(检测到手机打开才会自动弹出) 第一套:自动拨号 访问自动弹到拨号界面,并自动输入手机号. 第二套:自动短信 访问自动弹到短信界面,并自动输入短信 ...
- 临时停车扫码自动拨号短信源码
简介: 也没啥好介绍的:分为两套源码(检测到手机打开才会自动弹出) 第一套:自动拨号访问自动弹到拨号界面,并自动输入手机号. 第二套:自动短信访问自动弹到短信界面,并自动输入短信内容和手机号. 网盘下 ...
- android短信源码部分解析(双卡)
点击新建短信之后 @Overrideprotected void onCreate(Bundle savedInstanceState) {mIsSmsEnabled = MmsConfig.isSm ...
- PHP版本移动物联网卡短信发送接收,发送短信源码对接,支持中文发送,onelink短信发送源码,物联网卡短信发送
移动物联网卡短信发送和接收源码,php+vue+tp6版本,支持中文: 开发流程 1)提供移动相关的账号 2)提供服务器,ip需要做好在移动的备份 3)linux 服务器 4)配置workman所需要 ...
- android 脚本引擎,autojs脚本引擎实现的安卓手机发短信源码
说明 本文提供的代码仅供参考.不建议用于生产环境. 可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能" ...
- autojs脚本引擎实现的安卓手机发短信源码
说明 本文提供的代码仅供参考.不建议用于生产环境. 可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能" ...
最新文章
- HALCON识别数字ID
- 精益数据分析 | 你孜孜追求的“增长”可能只是自嗨
- linux清理swap内容,Linux如何清理swap.buffer及cache等缓存
- 修改android framework学习
- CH - 0501 货仓选址(中位数)
- C/C++越来越不行了?让我们看看C++的未来趋势
- nuxt 全局css_解决nuxt 自定义全局方法,全局属性,全局变量的问题
- 以太坊geth区块链私链建立
- 《南溪的目标检测学习笔记》——基础算子的学习笔记
- Tomcat运行时报 cannot be cast to javax.servlet.Servlet
- spring data jpa 查询部分字段列名无效问题
- 产品经理数据分析入门
- ppoe拨号被远程计算机终止,Windows各操作系统常见PPPoE拨号错误代码说明
- 华创期货恒生网上交易
- Greedy Algorithm
- 【构建ML驱动的应用程序】第 5 章 :训练和评估模型
- 如何扩大C盘的大小(电脑c盘太小的解决办法,分区助手V8.8操作步骤)
- [机器学习] 训练过程中的train,val,test的区别
- 2.21天21步:三周实现创业起步!
- 初学者:英语和数学不好,能学编程吗?