使用Android Studio调试系统应用之TvSettings(二):build.gradle

前言

上一篇文章介绍了将aosp原生APK源码,移植为android studio工程的基本思路,并且做完了src及res文件的替换工作,一个基于AS的Settings APK工程就建立好了,但工作还远未结束。本文将讲解调试过程中的依赖问题。

相关文章

准备工作

  1. AOSP系统源代码
    1.1 即前文提取TvSettings的那包源码
    1.2 搜索AOSP源码获取android原版,可使用前文的aosp目录下手机版本替代 TvSettings
    1.3 可使用开发板提供的android源码,使用其Settings
    1.4 对aosp源码做完整编译,后续步骤将提取其生成的系统库文件
  2. 开发平台
    2.1 aosp 的google原版,可使用android 模拟器
    2.2 芯片原厂版本,请使用配套开发板
  3. Git环境
    3.1 为减少失误次数,需要用Git管理每次修改
  4. 约定
    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包

  1. 对于android-support-*, 都比较熟悉,直接导入即可
  2. 对于framework.jar是系统应用必备依赖,需要从编译后的文件中复制过来
  3. 对于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里面的对应项目进行命名

使用Android Studio调试系统应用之TvSettings(二):build.gradle

将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 )
    使用Android Studio调试系统应用之TvSettings(二):build.gradle

结束语

依赖和库文件已经添加完毕,但其实还会遇到一些缺少的库,资源,以及重复资源等各种错误,下一章,将介绍如何处理这些所遇到的错误。

上一篇:图文并茂解决Client does not support authentication protocol requested by server; consider upgrading MySQL


下一篇:多文件上传:从前台到后台代码实现