文章目录

  • 前言
  • 一、导入源码
  • 二、添加依赖
    • 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相关推荐

  1. 网页短信后台开发 短息系统平台定制 web版定制 平台源码架构 短信源码开发升级接入SMPP通道

    网页短信后台开发 短息系统平台定制 web版定制 平台源码架构 短信源码开发升级接入SMPP通道 WEB短信系统SMPP接入功能上线 接入SMPP通道所需要用到的技术 1:多线程 2:服务程序,并不是 ...

  2. 临时停车自动拨号发短信源码(新增背景版)

    介绍: 临时停车自动拨号发短信源码(新增背景版) 修正了两处结束符号,增加了背景分为两套源码(检测到手机打开才会自动弹出)第一套:自动拨号访问自动弹到拨号界面,并自动输入手机号. 第二套:自动短信访问 ...

  3. php发送腾讯云变量短信源码,php结合腾讯云短信实现发送短信功能!(群发和单发都可以)...

    namespace app\home\controller; use core\basic\Controller; use core\basic\Smsnotice; use app\home\mod ...

  4. 临时停车自动拨号发短信源码,亲测可用

    介绍: 文本修改电话号码上传空间即可访问 分为两套源码(检测到手机打开才会自动弹出) 第一套:自动拨号 访问自动弹到拨号界面,并自动输入手机号. 第二套:自动短信 访问自动弹到短信界面,并自动输入短信 ...

  5. 临时停车扫码自动拨号短信源码

    简介: 也没啥好介绍的:分为两套源码(检测到手机打开才会自动弹出) 第一套:自动拨号访问自动弹到拨号界面,并自动输入手机号. 第二套:自动短信访问自动弹到短信界面,并自动输入短信内容和手机号. 网盘下 ...

  6. android短信源码部分解析(双卡)

    点击新建短信之后 @Overrideprotected void onCreate(Bundle savedInstanceState) {mIsSmsEnabled = MmsConfig.isSm ...

  7. PHP版本移动物联网卡短信发送接收,发送短信源码对接,支持中文发送,onelink短信发送源码,物联网卡短信发送

    移动物联网卡短信发送和接收源码,php+vue+tp6版本,支持中文: 开发流程 1)提供移动相关的账号 2)提供服务器,ip需要做好在移动的备份 3)linux 服务器 4)配置workman所需要 ...

  8. android 脚本引擎,autojs脚本引擎实现的安卓手机发短信源码

    说明 本文提供的代码仅供参考.不建议用于生产环境. 可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能" ...

  9. autojs脚本引擎实现的安卓手机发短信源码

    说明 本文提供的代码仅供参考.不建议用于生产环境. 可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能" ...

最新文章

  1. HALCON识别数字ID
  2. 精益数据分析 | 你孜孜追求的“增长”可能只是自嗨
  3. linux清理swap内容,Linux如何清理swap.buffer及cache等缓存
  4. 修改android framework学习
  5. CH - 0501 货仓选址(中位数)
  6. C/C++越来越不行了?让我们看看C++的未来趋势
  7. nuxt 全局css_解决nuxt 自定义全局方法,全局属性,全局变量的问题
  8. 以太坊geth区块链私链建立
  9. 《南溪的目标检测学习笔记》——基础算子的学习笔记
  10. Tomcat运行时报 cannot be cast to javax.servlet.Servlet
  11. spring data jpa 查询部分字段列名无效问题
  12. 产品经理数据分析入门
  13. ppoe拨号被远程计算机终止,Windows各操作系统常见PPPoE拨号错误代码说明
  14. 华创期货恒生网上交易
  15. Greedy Algorithm
  16. 【构建ML驱动的应用程序】第 5 章 :训练和评估模型
  17. 如何扩大C盘的大小(电脑c盘太小的解决办法,分区助手V8.8操作步骤)
  18. [机器学习] 训练过程中的train,val,test的区别
  19. 2.21天21步:三周实现创业起步!
  20. 初学者:英语和数学不好,能学编程吗?

热门文章

  1. 一分钟之内搭建自己的直播服务器?
  2. 文件传输协议的五种安全文件传输替代方案
  3. VMware启动虚拟机一直处于黑屏
  4. Word2Vec解释
  5. XILINX SGMII千兆以太网 (2)
  6. 海外博友链接集合(陆续更新中)
  7. 传统网络变压器和电容试片式性能区别
  8. excel数据平均分配给多人_excel数据拆分:将单列拆分成多列的几种方法
  9. Centos7 添加大于2T磁盘,使用GPT硬盘格式和XFS文件系统
  10. java 递归习题训练,Java蓝桥杯——递归练习题:走台阶(偶数版)