前言
上一篇文章介绍了将aosp原生APK源码,移植为android studio工程的基本思路,并且做完了src及res文件的替换工作,一个基于AS的Settings APK工程就建立好了,但工作还远未结束。本文将讲解调试过程中的依赖问题。
相关文章
准备工作
-
AOSP系统源代码
1.1 即前文提取TvSettings的那包源码
1.2 搜索AOSP源码获取android原版,可使用前文的aosp目录下手机版本替代 TvSettings
1.3 可使用开发板提供的android源码,使用其Settings
1.4 对aosp源码做完整编译,后续步骤将提取其生成的系统库文件 -
开发平台
2.1 aosp 的google原版,可使用android 模拟器
2.2 芯片原厂版本,请使用配套开发板 -
Git环境
3.1 为减少失误次数,需要用Git管理每次修改 -
约定
4.1 ORG、org字样,代表原版代码
4.2 本文以MTK原厂的andorid源码为基础,以TvSetting原厂APP源码作为移植对象,它是基于AOSP Settings的简单修改版本
Git提交修改
source_as/TvSettingsPlus$ git init
source_as/TvSettingsPlus$ git add . -A
source_as/TvSettingsPlus$ git commit -m "initialize project."
回顾Android.mk
source_org\TvSettings\Settings\Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_DEX_PREOPT=false
LOCAL_PACKAGE_NAME := TvSettingsPlus
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_TAGS := optional
LOCAL_PROGUARD_FLAG_FILES := proguard.cfg
LOCAL_STATIC_JAVA_LIBRARIES += com.mediatek.dm ----> 此为需要的依赖库,且为STATIC
LOCAL_PRIVILEGED_MODULE := true
LOCAL_MODULE_OWNER := mtk
LOCAL_STATIC_ANDROID_LIBRARIES := \ ----> 此为需要的依赖库,且为STATIC
android-support-v7-recyclerview \
android-support-v7-preference \
android-support-v7-appcompat \
android-support-v14-preference \
android-support-v17-preference-leanback \
android-support-v17-leanback \
android-arch-lifecycle-extensions
LOCAL_STATIC_JAVA_LIBRARIES := \ ----> 此为需要的依赖库,且为STATIC
com.mediatek.support.tv \
com.mediatek.network \
com.mediatek.support.sharecode \
android-arch-lifecycle-common-java8 \
com.mediatek.tv.ini \
com.mediatek.support.aipq
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_USE_AAPT2 := true
LOCAL_SRC_FILES := \
$(call all-java-files-under, src) \
$(call all-Iaidl-files-under, src)
LOCAL_OVERRIDES_PACKAGES := TvSettings ----> 替代了AOSP原生的TvSettings(手机版),手机版将被忽略
include frameworks/base/packages/SettingsLib/common.mk ----> 对SettingsLib像是有依赖,先记住
include $(BUILD_PACKAGE)
# Use the following include to make our test apk.
ifeq (,$(ONE_SHOT_MAKEFILE))
include $(call all-makefiles-under,$(LOCAL_PATH))
endif
查找所依赖的JAR包
- 对于android-support-*, 都比较熟悉,直接导入即可
- 对于framework.jar是系统应用必备依赖,需要从编译后的文件中复制过来
- 对于com.mediatek.*,在Android.mk中已声明,也需要从编译后的文件中复制过来
路径:aosp_tv\out\target\common\obj\JAVA_LIBRARIES
获取:aosp_tv\out\target\common\obj\JAVA_LIBRARIES\XXXXX\classes.jar 并按Android.mk里面的对应项目进行命名
将JAR包导入到AS工程
下面内容请参考楼上的Android.mk和JAVA_LIBRARIES\XXXXX
对于名字找不到的,可在JAVA_LIBRARIES目录下使用grep com.xxx.xxx.xxx 命令,看被谁包含了
szhou@yanfa-zs-502143:/mnt/d/szhou/note/android_01/source_as/TvSettingsPlus$ tree -L 2
.
├── app
│
├── libs
│ ├── com.mediatek.network.jar -> com.mediatek.network
│ ├── com.mediatek.support.aipq.jar -> com.mediatek.support.aipq
│ ├── com.mediatek.tv.ini.jar -> com.mediatek.tv.ini
│ ├── framework.jar -> 即SDK/android.jar,但包含了hide隐藏函数,非STATIC
│ ├── mtk-framework.jar -> 此部分是MTK特有,和android.jar类似,必备jar包,非STATIC
│ ├── mtk-support-sharecode.jar -> com.mediatek.support.sharecode
│ └── com.mediatek.support.tv.jar -> com.mediatek.support.tv
app/build.gradle 依赖项
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 28 --> target平台android 9对应 28
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.android.tv.settings"
minSdkVersion 23 -> 按之前分析,填写minSDK=28
targetSdkVersion 28 -> 目标平台android 9对应 Version 28
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compileOnly files('../libs/framework.jar')
compileOnly files('../libs/mtk-framework.jar')
implementation files('../libs/com.mediatek.support.tv.jar')
implementation files('../libs/mtk-support-sharecode.jar')
implementation files('../libs/com.mediatek.support.aipq.jar')
implementation files('../libs/com.mediatek.network.jar')
implementation files('../libs/com.mediatek.tv.ini.jar')
implementation 'com.android.support:preference-v7:28.0.0'
implementation 'com.android.support:leanback-v17:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:preference-v14:28.0.0'
implementation 'com.android.support:leanback-v17:28.0.0'
implementation 'com.android.support:preference-leanback-v17:28.0.0'
implementation 'android.arch.lifecycle:extensions:1.1.1'
}
TvSettingsPlus/build.gradle 依赖项
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.3"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
// 如果有多个jar需要提升优先级,用分号隔开,比如:jar/framework.jar;jar/core-all.jar;
// 如下,因我的libs和此build.gradle同级,所以路径改为libs/xxx.jar
// 因为要在默认SDK/android.jar之前被引用,所以将fraework.jar提到查找路径的最前面
options.compilerArgs.add('-Xbootclasspath/p:libs/framework.jar;')
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
-
库文件和依赖添加完毕,使用AS做一次Git提交:VCS -> commit ( ctrl + k )
结束语
依赖和库文件已经添加完毕,但其实还会遇到一些缺少的库,资源,以及重复资源等各种错误,下一章,将介绍如何处理这些所遇到的错误。