Android学习20 -- 手搓App2(Gradle)

ops/2025/2/7 4:52:05/

1 前言

昨天写了一个完全手搓的:Android学习19 -- 手搓App-CSDN博客

后面谷歌说不要用aapt,d8这些来搞。其实不想弄Gradle的,不过想着既然开始了,就多看一些。之前写过一篇Gradle,不过是最简单的编译,不涉及到安卓。Android学习18 -- Gradle_resourcehashescache.bin-CSDN博客

现在既然环境都搭建了,索性在上一篇的基础上一起弄弄Gradle看。

2 Gradle环境和配置 

新的文件结构和之前都有不同。

代码和AndroidManifest.xml都是放在app\src\main下面。

2.1 配置文件

根目录下面有一个build.gradle,app下面也要增加一个build.gradle。

整体来说文件增加非常多。可以参看最后的附录。

代码延续了之前的代码,src和AndroidManifest.xml都是上一篇文章中的。

增加的文件主要就是Gradle相关的。

在根文件夹下面增加两个build.gradle和gradle.properties:

build.gradle

buildscript {repositories {maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/public' }maven { url 'https://maven.aliyun.com/repository/central' }google()mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:7.0.2'}
}allprojects {repositories {maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/public' }maven { url 'https://maven.aliyun.com/repository/central' }google()mavenCentral()}
}

这里几个maven标志是为了解决无法下载的问题。换成了国内的阿里云服务器。。。

这里最坑的就是classpath 'com.android.tools.build:gradle:7.0.2',这里面gradle的版本我前后换了四五个。。。一直不停地有各种匹配的问题冒出来。单纯从出错信息,你还看不出来是gradle版本导致的问题。

gradle.properties

android.useAndroidX=true
android.enableJetifier=true

在App的文件夹中,也要增加一个build.gradle

plugins {id 'com.android.application'
}android {compileSdk 28// Target Android 9defaultConfig {applicationId "com.example.simpleapp" // Replace with your package nameminSdk 21 // Minimum SDK can be lower than 28targetSdk 28// Target Android 9versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}dependencies {implementation 'androidx.appcompat:appcompat:1.3.1'
}

因为目标设备是Android9,所以SDK选的28。

这里最坑的就是dependencies,里面要依赖什么库,哪个库要什么版本,不熟练的话根本不知道,还只能去猜碰运气。。。我是试了好多次。。。

2.2 环境

环境上也是非常折腾,之前用javac,aapt做包的时候,也没有挑JDK的版本。这里就不行了,必须要Android9匹配的版本,前后装了几个版本的JDK,还有Gradle,苦不堪言。。。最后换到jdk11,终于才可以了。至于Android_SDK,好像Gradle会自己管理,这个倒是不用手动去管理了,当然,这个也挺简单的。

3 构建

环境和配置文件弄好之后,运行构建本身倒是挺简单的,就是在根目录运行两个命令:

gradle wrapper
gradlew assembleDebug

但是真正运行这个堪称噩梦,无数次的报错,各种版本匹配,环境,配置的问题。如果没有GPT这些,估计我是真解决不了。

反正原则就是遇到问题解决问题吧,主要还是要根据Android9的版本,很多东西要切回老的组件。问题是你根本不知道什么版本安卓需要对应什么版本JDK,Gradle这些环境和一大堆库。。。

这里还有一个坑,默认状态下运行gradlew assembleDebug,会去下载Gradle,倒是因为网络问题,是大概率要timeout的。折腾了半天,最后参考的这篇:【flutter】 Running Gradle task ‘assembleDebug‘...超时问题_running gradle task 'assembledebug'...-CSDN博客

这里要修改gradle\wrapper\gradle-wrapper.properties,把里面的服务器位置改成这个https://mirrors.cloud.tencent.com/gradle/

无数次的折腾后,终于过了: 

没有编译,也没有d8,也不用手动签名了。在output下直接可以看到做好的apk

新的apk差不多1.5M,比之前完全手搓的大了非常多。用压缩软件打开做好的apk。

可以看到dex文件就是3个,其中第一个原始有2M多,res里面东西也很多,估计是Gradle搞的时候加了很多私货吧。。。

4 运行

编完之后之后就很顺利了,ADB直接安装。(安装前要先卸载之前的,否则会说签名不匹配)

adb install app-debug.apk

其实对比一下昨天完全手搓的,安装的时候没有提示说有组件太老了,而且界面精美了不少。看来Gradle确实多做了一些自动化的内容。但是确实配置太麻烦了。。。

5 附录

完整的文件列表:

E:.
│  build.gradle
│  gradle.properties
│  gradlew
│  gradlew.bat
│  settings.gradle
│
├─.gradle
│  ├─6.9.2
│  │  │  gc.properties
│  │  │
│  │  ├─fileChanges
│  │  │      last-build.bin
│  │  │
│  │  ├─fileHashes
│  │  │      fileHashes.lock
│  │  │
│  │  └─vcsMetadata-1
│  ├─7.0.2
│  │  │  gc.properties
│  │  │
│  │  ├─dependencies-accessors
│  │  │      dependencies-accessors.lock
│  │  │      gc.properties
│  │  │
│  │  ├─executionHistory
│  │  │      executionHistory.bin
│  │  │      executionHistory.lock
│  │  │
│  │  ├─fileChanges
│  │  │      last-build.bin
│  │  │
│  │  ├─fileHashes
│  │  │      fileHashes.bin
│  │  │      fileHashes.lock
│  │  │      resourceHashesCache.bin
│  │  │
│  │  ├─javaCompile
│  │  │      classAnalysis.bin
│  │  │      jarAnalysis.bin
│  │  │      javaCompile.lock
│  │  │      taskHistory.bin
│  │  │
│  │  └─vcsMetadata-1
│  ├─8.12.1
│  │  │  gc.properties
│  │  │
│  │  ├─checksums
│  │  │      checksums.lock
│  │  │
│  │  ├─executionHistory
│  │  │      executionHistory.bin
│  │  │      executionHistory.lock
│  │  │
│  │  ├─expanded
│  │  ├─fileChanges
│  │  │      last-build.bin
│  │  │
│  │  ├─fileHashes
│  │  │      fileHashes.bin
│  │  │      fileHashes.lock
│  │  │
│  │  └─vcsMetadata
│  ├─buildOutputCleanup
│  │      buildOutputCleanup.lock
│  │      cache.properties
│  │      outputFiles.bin
│  │
│  ├─checksums
│  │      checksums.lock
│  │      md5-checksums.bin
│  │      sha1-checksums.bin
│  │
│  └─vcs-1
│          gc.properties
│
├─app
│  │  build.gradle
│  │  my-release-key.jks
│  │
│  ├─bin
│  │  └─com
│  │      └─example
│  │          └─simpleapp
│  │                  MainActivity.class
│  │
│  ├─build
│  │  ├─generated
│  │  │  ├─ap_generated_sources
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─res
│  │  │  │  ├─pngs
│  │  │  │  │  └─debug
│  │  │  │  └─resValues
│  │  │  │      └─debug
│  │  │  └─source
│  │  │      └─buildConfig
│  │  │          └─debug
│  │  │              └─com
│  │  │                  └─example
│  │  │                      └─simpleapp
│  │  │                              BuildConfig.java
│  │  │
│  │  ├─intermediates
│  │  │  ├─aar_metadata_check
│  │  │  │  └─debug
│  │  │  ├─annotation_processor_list
│  │  │  │  └─debug
│  │  │  │          annotationProcessors.json
│  │  │  │
│  │  │  ├─app_metadata
│  │  │  │  └─debug
│  │  │  │          app-metadata.properties
│  │  │  │
│  │  │  ├─compatible_screen_manifest
│  │  │  │  └─debug
│  │  │  │          output-metadata.json
│  │  │  │
│  │  │  ├─compile_and_runtime_not_namespaced_r_class_jar
│  │  │  │  └─debug
│  │  │  │          R.jar
│  │  │  │
│  │  │  ├─compressed_assets
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─data_binding_layout_info_type_merge
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─desugar_graph
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  │          ├─currentProject
│  │  │  │          │  ├─dirs_bucket_0
│  │  │  │          │  │      graph.bin
│  │  │  │          │  │
│  │  │  │          │  ├─dirs_bucket_1
│  │  │  │          │  │      graph.bin
│  │  │  │          │  │
│  │  │  │          │  ├─dirs_bucket_2
│  │  │  │          │  │      graph.bin
│  │  │  │          │  │
│  │  │  │          │  ├─dirs_bucket_3
│  │  │  │          │  │      graph.bin
│  │  │  │          │  │
│  │  │  │          │  ├─jar_c74e1c0ced86e050bd2576dd01860040994d379f4892d40b3abdfafcbde9e752_bucket_0
│  │  │  │          │  │      graph.bin
│  │  │  │          │  │
│  │  │  │          │  ├─jar_c74e1c0ced86e050bd2576dd01860040994d379f4892d40b3abdfafcbde9e752_bucket_1
│  │  │  │          │  │      graph.bin
│  │  │  │          │  │
│  │  │  │          │  ├─jar_c74e1c0ced86e050bd2576dd01860040994d379f4892d40b3abdfafcbde9e752_bucket_2
│  │  │  │          │  │      graph.bin
│  │  │  │          │  │
│  │  │  │          │  └─jar_c74e1c0ced86e050bd2576dd01860040994d379f4892d40b3abdfafcbde9e752_bucket_3
│  │  │  │          │          graph.bin
│  │  │  │          │
│  │  │  │          ├─externalLibs
│  │  │  │          ├─mixedScopes
│  │  │  │          └─otherProjects
│  │  │  ├─dex
│  │  │  │  └─debug
│  │  │  │      ├─mergeExtDexDebug
│  │  │  │      │      classes.dex
│  │  │  │      │
│  │  │  │      ├─mergeLibDexDebug
│  │  │  │      │  ├─0
│  │  │  │      │  ├─1
│  │  │  │      │  ├─10
│  │  │  │      │  ├─11
│  │  │  │      │  ├─12
│  │  │  │      │  ├─13
│  │  │  │      │  ├─14
│  │  │  │      │  ├─15
│  │  │  │      │  ├─2
│  │  │  │      │  ├─3
│  │  │  │      │  ├─4
│  │  │  │      │  ├─5
│  │  │  │      │  ├─6
│  │  │  │      │  ├─7
│  │  │  │      │  ├─8
│  │  │  │      │  └─9
│  │  │  │      └─mergeProjectDexDebug
│  │  │  │          ├─0
│  │  │  │          │      classes.dex
│  │  │  │          │
│  │  │  │          ├─1
│  │  │  │          ├─10
│  │  │  │          ├─11
│  │  │  │          ├─12
│  │  │  │          ├─13
│  │  │  │          ├─14
│  │  │  │          │      classes.dex
│  │  │  │          │
│  │  │  │          ├─15
│  │  │  │          ├─2
│  │  │  │          ├─3
│  │  │  │          ├─4
│  │  │  │          ├─5
│  │  │  │          ├─6
│  │  │  │          ├─7
│  │  │  │          ├─8
│  │  │  │          └─9
│  │  │  ├─dex_archive_input_jar_hashes
│  │  │  │  └─debug
│  │  │  │          out
│  │  │  │
│  │  │  ├─dex_number_of_buckets_file
│  │  │  │  └─debug
│  │  │  │          out
│  │  │  │
│  │  │  ├─duplicate_classes_check
│  │  │  │  └─debug
│  │  │  ├─external_file_lib_dex_archives
│  │  │  │  └─debug
│  │  │  ├─external_libs_dex_archive
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─external_libs_dex_archive_with_artifact_transforms
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─incremental
│  │  │  │  ├─debug-mergeJavaRes
│  │  │  │  │  │  merge-state
│  │  │  │  │  │
│  │  │  │  │  └─zip-cache
│  │  │  │  │          048HcTWWEq1lulbmUyQznT37EsA=
│  │  │  │  │          1a_EIO9PiBosWsI065pOT3qf7Ds=
│  │  │  │  │          1hmxbp0IIpB68Da4s0EztcNOuOs=
│  │  │  │  │          1hruv_CVTc7rACzgrV_EbGRL8aQ=
│  │  │  │  │          1KCmdii_GxXEpMWe5Pq8kyWqzqQ=
│  │  │  │  │          4NE736MhQ0mtuWu+hfqUiTOu13c=
│  │  │  │  │          8WkG10fpk_rZSp2aLy7KzLtm3EE=
│  │  │  │  │          9QKNvWu_7YUZQ1fUM2miHNFtCTo=
│  │  │  │  │          AfMj8haKzuev025IN1KKjT1Eny4=
│  │  │  │  │          At5i9i+tmegiq7FS1ao+_fZl8po=
│  │  │  │  │          bFDA9U0WYHVLP0PcNrkWdkKfAa8=
│  │  │  │  │          Cs1Dq7KfqTKuzs6HZppCnIzUTVQ=
│  │  │  │  │          FGzaasxdJ2z7_VgPq4ccnamPIos=
│  │  │  │  │          GHo9yJJtlaUoeIi0nkX_AZF6irk=
│  │  │  │  │          iAc+h+gBLDWoxrpG_Z_imkBl0ik=
│  │  │  │  │          JxuFh8wfiBAhlhJYcl_D93HpKGc=
│  │  │  │  │          nD6OwsZWtEe__BX75guczfU7kVA=
│  │  │  │  │          Nxxtm6fSLnclQYIfAWaya6DesE8=
│  │  │  │  │          PpmdA2vpVPet09q69BUMqYmPTSg=
│  │  │  │  │          QA6qPov9_kseM0wYMzsoSBfFF_Y=
│  │  │  │  │          TZEcozvYarb4JDmXWSbtY3Xa4Hs=
│  │  │  │  │          VfQqCnVCBACk8ME8kewXddA18Ek=
│  │  │  │  │          WtmjFSON6pWnWiXaZ5xxdg1U5BM=
│  │  │  │  │          ww5alz54j37jxPyaSnMgBR_nLKw=
│  │  │  │  │          wZW2oupEq4nj4seQKhI3ytH5u7U=
│  │  │  │  │          XJxTyhc62GgI8H8jWC9SVYWr5ow=
│  │  │  │  │          zAXtx6HcKosMvikBJB+60jWYvK0=
│  │  │  │  │
│  │  │  │  ├─mergeDebugAssets
│  │  │  │  │      merger.xml
│  │  │  │  │
│  │  │  │  ├─mergeDebugJniLibFolders
│  │  │  │  │      merger.xml
│  │  │  │  │
│  │  │  │  ├─mergeDebugResources
│  │  │  │  │  │  compile-file-map.properties
│  │  │  │  │  │  merger.xml
│  │  │  │  │  │
│  │  │  │  │  ├─merged.dir
│  │  │  │  │  │  ├─values
│  │  │  │  │  │  │      values.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-af
│  │  │  │  │  │  │      values-af.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-am
│  │  │  │  │  │  │      values-am.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ar
│  │  │  │  │  │  │      values-ar.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-as
│  │  │  │  │  │  │      values-as.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-az
│  │  │  │  │  │  │      values-az.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-b+sr+Latn
│  │  │  │  │  │  │      values-b+sr+Latn.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-be
│  │  │  │  │  │  │      values-be.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-bg
│  │  │  │  │  │  │      values-bg.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-bn
│  │  │  │  │  │  │      values-bn.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-bs
│  │  │  │  │  │  │      values-bs.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ca
│  │  │  │  │  │  │      values-ca.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-cs
│  │  │  │  │  │  │      values-cs.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-da
│  │  │  │  │  │  │      values-da.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-de
│  │  │  │  │  │  │      values-de.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-el
│  │  │  │  │  │  │      values-el.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-en-rAU
│  │  │  │  │  │  │      values-en-rAU.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-en-rCA
│  │  │  │  │  │  │      values-en-rCA.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-en-rGB
│  │  │  │  │  │  │      values-en-rGB.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-en-rIN
│  │  │  │  │  │  │      values-en-rIN.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-en-rXC
│  │  │  │  │  │  │      values-en-rXC.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-es
│  │  │  │  │  │  │      values-es.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-es-rUS
│  │  │  │  │  │  │      values-es-rUS.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-et
│  │  │  │  │  │  │      values-et.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-eu
│  │  │  │  │  │  │      values-eu.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-fa
│  │  │  │  │  │  │      values-fa.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-fi
│  │  │  │  │  │  │      values-fi.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-fr
│  │  │  │  │  │  │      values-fr.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-fr-rCA
│  │  │  │  │  │  │      values-fr-rCA.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-gl
│  │  │  │  │  │  │      values-gl.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-gu
│  │  │  │  │  │  │      values-gu.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-h720dp-v13
│  │  │  │  │  │  │      values-h720dp-v13.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-hdpi-v4
│  │  │  │  │  │  │      values-hdpi-v4.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-hi
│  │  │  │  │  │  │      values-hi.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-hr
│  │  │  │  │  │  │      values-hr.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-hu
│  │  │  │  │  │  │      values-hu.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-hy
│  │  │  │  │  │  │      values-hy.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-in
│  │  │  │  │  │  │      values-in.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-is
│  │  │  │  │  │  │      values-is.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-it
│  │  │  │  │  │  │      values-it.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-iw
│  │  │  │  │  │  │      values-iw.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ja
│  │  │  │  │  │  │      values-ja.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ka
│  │  │  │  │  │  │      values-ka.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-kk
│  │  │  │  │  │  │      values-kk.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-km
│  │  │  │  │  │  │      values-km.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-kn
│  │  │  │  │  │  │      values-kn.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ko
│  │  │  │  │  │  │      values-ko.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ky
│  │  │  │  │  │  │      values-ky.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-land
│  │  │  │  │  │  │      values-land.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-large-v4
│  │  │  │  │  │  │      values-large-v4.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ldltr-v21
│  │  │  │  │  │  │      values-ldltr-v21.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-lo
│  │  │  │  │  │  │      values-lo.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-lt
│  │  │  │  │  │  │      values-lt.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-lv
│  │  │  │  │  │  │      values-lv.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-mk
│  │  │  │  │  │  │      values-mk.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ml
│  │  │  │  │  │  │      values-ml.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-mn
│  │  │  │  │  │  │      values-mn.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-mr
│  │  │  │  │  │  │      values-mr.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ms
│  │  │  │  │  │  │      values-ms.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-my
│  │  │  │  │  │  │      values-my.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-nb
│  │  │  │  │  │  │      values-nb.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ne
│  │  │  │  │  │  │      values-ne.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-night-v8
│  │  │  │  │  │  │      values-night-v8.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-nl
│  │  │  │  │  │  │      values-nl.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-or
│  │  │  │  │  │  │      values-or.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-pa
│  │  │  │  │  │  │      values-pa.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-pl
│  │  │  │  │  │  │      values-pl.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-port
│  │  │  │  │  │  │      values-port.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-pt
│  │  │  │  │  │  │      values-pt.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-pt-rBR
│  │  │  │  │  │  │      values-pt-rBR.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-pt-rPT
│  │  │  │  │  │  │      values-pt-rPT.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ro
│  │  │  │  │  │  │      values-ro.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ru
│  │  │  │  │  │  │      values-ru.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-si
│  │  │  │  │  │  │      values-si.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-sk
│  │  │  │  │  │  │      values-sk.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-sl
│  │  │  │  │  │  │      values-sl.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-sq
│  │  │  │  │  │  │      values-sq.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-sr
│  │  │  │  │  │  │      values-sr.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-sv
│  │  │  │  │  │  │      values-sv.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-sw
│  │  │  │  │  │  │      values-sw.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-sw600dp-v13
│  │  │  │  │  │  │      values-sw600dp-v13.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ta
│  │  │  │  │  │  │      values-ta.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-te
│  │  │  │  │  │  │      values-te.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-th
│  │  │  │  │  │  │      values-th.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-tl
│  │  │  │  │  │  │      values-tl.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-tr
│  │  │  │  │  │  │      values-tr.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-uk
│  │  │  │  │  │  │      values-uk.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-ur
│  │  │  │  │  │  │      values-ur.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-uz
│  │  │  │  │  │  │      values-uz.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v16
│  │  │  │  │  │  │      values-v16.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v17
│  │  │  │  │  │  │      values-v17.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v18
│  │  │  │  │  │  │      values-v18.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v21
│  │  │  │  │  │  │      values-v21.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v22
│  │  │  │  │  │  │      values-v22.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v23
│  │  │  │  │  │  │      values-v23.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v24
│  │  │  │  │  │  │      values-v24.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v25
│  │  │  │  │  │  │      values-v25.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v26
│  │  │  │  │  │  │      values-v26.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-v28
│  │  │  │  │  │  │      values-v28.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-vi
│  │  │  │  │  │  │      values-vi.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-watch-v20
│  │  │  │  │  │  │      values-watch-v20.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-watch-v21
│  │  │  │  │  │  │      values-watch-v21.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-xlarge-v4
│  │  │  │  │  │  │      values-xlarge-v4.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-zh-rCN
│  │  │  │  │  │  │      values-zh-rCN.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-zh-rHK
│  │  │  │  │  │  │      values-zh-rHK.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  ├─values-zh-rTW
│  │  │  │  │  │  │      values-zh-rTW.xml
│  │  │  │  │  │  │
│  │  │  │  │  │  └─values-zu
│  │  │  │  │  │          values-zu.xml
│  │  │  │  │  │
│  │  │  │  │  └─stripped.dir
│  │  │  │  ├─mergeDebugShaders
│  │  │  │  │      merger.xml
│  │  │  │  │
│  │  │  │  ├─packageDebug
│  │  │  │  │  └─tmp
│  │  │  │  │      └─debug
│  │  │  │  │          │  dex-renamer-state.txt
│  │  │  │  │          │
│  │  │  │  │          └─zip-cache
│  │  │  │  │                  androidResources
│  │  │  │  │                  javaResources0
│  │  │  │  │
│  │  │  │  └─processDebugResources
│  │  │  ├─javac
│  │  │  │  └─debug
│  │  │  │      └─classes
│  │  │  │          └─com
│  │  │  │              └─example
│  │  │  │                  └─simpleapp
│  │  │  │                          BuildConfig.class
│  │  │  │                          MainActivity.class
│  │  │  │
│  │  │  ├─manifest_merge_blame_file
│  │  │  │  └─debug
│  │  │  │          manifest-merger-blame-debug-report.txt
│  │  │  │
│  │  │  ├─merged_assets
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─merged_java_res
│  │  │  │  └─debug
│  │  │  │          base.jar
│  │  │  │
│  │  │  ├─merged_jni_libs
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─merged_manifest
│  │  │  │  └─debug
│  │  │  │          AndroidManifest.xml
│  │  │  │
│  │  │  ├─merged_manifests
│  │  │  │  └─debug
│  │  │  │          AndroidManifest.xml
│  │  │  │          output-metadata.json
│  │  │  │
│  │  │  ├─merged_res
│  │  │  │  └─debug
│  │  │  │          values-af_values-af.arsc.flat
│  │  │  │          values-am_values-am.arsc.flat
│  │  │  │          values-ar_values-ar.arsc.flat
│  │  │  │          values-as_values-as.arsc.flat
│  │  │  │          values-az_values-az.arsc.flat
│  │  │  │          values-b+sr+Latn_values-b+sr+Latn.arsc.flat
│  │  │  │          values-be_values-be.arsc.flat
│  │  │  │          values-bg_values-bg.arsc.flat
│  │  │  │          values-bn_values-bn.arsc.flat
│  │  │  │          values-bs_values-bs.arsc.flat
│  │  │  │          values-ca_values-ca.arsc.flat
│  │  │  │          values-cs_values-cs.arsc.flat
│  │  │  │          values-da_values-da.arsc.flat
│  │  │  │          values-de_values-de.arsc.flat
│  │  │  │          values-el_values-el.arsc.flat
│  │  │  │          values-en-rAU_values-en-rAU.arsc.flat
│  │  │  │          values-en-rCA_values-en-rCA.arsc.flat
│  │  │  │          values-en-rGB_values-en-rGB.arsc.flat
│  │  │  │          values-en-rIN_values-en-rIN.arsc.flat
│  │  │  │          values-en-rXC_values-en-rXC.arsc.flat
│  │  │  │          values-es-rUS_values-es-rUS.arsc.flat
│  │  │  │          values-es_values-es.arsc.flat
│  │  │  │          values-et_values-et.arsc.flat
│  │  │  │          values-eu_values-eu.arsc.flat
│  │  │  │          values-fa_values-fa.arsc.flat
│  │  │  │          values-fi_values-fi.arsc.flat
│  │  │  │          values-fr-rCA_values-fr-rCA.arsc.flat
│  │  │  │          values-fr_values-fr.arsc.flat
│  │  │  │          values-gl_values-gl.arsc.flat
│  │  │  │          values-gu_values-gu.arsc.flat
│  │  │  │          values-h720dp-v13_values-h720dp-v13.arsc.flat
│  │  │  │          values-hdpi-v4_values-hdpi-v4.arsc.flat
│  │  │  │          values-hi_values-hi.arsc.flat
│  │  │  │          values-hr_values-hr.arsc.flat
│  │  │  │          values-hu_values-hu.arsc.flat
│  │  │  │          values-hy_values-hy.arsc.flat
│  │  │  │          values-in_values-in.arsc.flat
│  │  │  │          values-is_values-is.arsc.flat
│  │  │  │          values-it_values-it.arsc.flat
│  │  │  │          values-iw_values-iw.arsc.flat
│  │  │  │          values-ja_values-ja.arsc.flat
│  │  │  │          values-ka_values-ka.arsc.flat
│  │  │  │          values-kk_values-kk.arsc.flat
│  │  │  │          values-km_values-km.arsc.flat
│  │  │  │          values-kn_values-kn.arsc.flat
│  │  │  │          values-ko_values-ko.arsc.flat
│  │  │  │          values-ky_values-ky.arsc.flat
│  │  │  │          values-land_values-land.arsc.flat
│  │  │  │          values-large-v4_values-large-v4.arsc.flat
│  │  │  │          values-ldltr-v21_values-ldltr-v21.arsc.flat
│  │  │  │          values-lo_values-lo.arsc.flat
│  │  │  │          values-lt_values-lt.arsc.flat
│  │  │  │          values-lv_values-lv.arsc.flat
│  │  │  │          values-mk_values-mk.arsc.flat
│  │  │  │          values-ml_values-ml.arsc.flat
│  │  │  │          values-mn_values-mn.arsc.flat
│  │  │  │          values-mr_values-mr.arsc.flat
│  │  │  │          values-ms_values-ms.arsc.flat
│  │  │  │          values-my_values-my.arsc.flat
│  │  │  │          values-nb_values-nb.arsc.flat
│  │  │  │          values-ne_values-ne.arsc.flat
│  │  │  │          values-night-v8_values-night-v8.arsc.flat
│  │  │  │          values-nl_values-nl.arsc.flat
│  │  │  │          values-or_values-or.arsc.flat
│  │  │  │          values-pa_values-pa.arsc.flat
│  │  │  │          values-pl_values-pl.arsc.flat
│  │  │  │          values-port_values-port.arsc.flat
│  │  │  │          values-pt-rBR_values-pt-rBR.arsc.flat
│  │  │  │          values-pt-rPT_values-pt-rPT.arsc.flat
│  │  │  │          values-pt_values-pt.arsc.flat
│  │  │  │          values-ro_values-ro.arsc.flat
│  │  │  │          values-ru_values-ru.arsc.flat
│  │  │  │          values-si_values-si.arsc.flat
│  │  │  │          values-sk_values-sk.arsc.flat
│  │  │  │          values-sl_values-sl.arsc.flat
│  │  │  │          values-sq_values-sq.arsc.flat
│  │  │  │          values-sr_values-sr.arsc.flat
│  │  │  │          values-sv_values-sv.arsc.flat
│  │  │  │          values-sw600dp-v13_values-sw600dp-v13.arsc.flat
│  │  │  │          values-sw_values-sw.arsc.flat
│  │  │  │          values-ta_values-ta.arsc.flat
│  │  │  │          values-te_values-te.arsc.flat
│  │  │  │          values-th_values-th.arsc.flat
│  │  │  │          values-tl_values-tl.arsc.flat
│  │  │  │          values-tr_values-tr.arsc.flat
│  │  │  │          values-uk_values-uk.arsc.flat
│  │  │  │          values-ur_values-ur.arsc.flat
│  │  │  │          values-uz_values-uz.arsc.flat
│  │  │  │          values-v16_values-v16.arsc.flat
│  │  │  │          values-v17_values-v17.arsc.flat
│  │  │  │          values-v18_values-v18.arsc.flat
│  │  │  │          values-v21_values-v21.arsc.flat
│  │  │  │          values-v22_values-v22.arsc.flat
│  │  │  │          values-v23_values-v23.arsc.flat
│  │  │  │          values-v24_values-v24.arsc.flat
│  │  │  │          values-v25_values-v25.arsc.flat
│  │  │  │          values-v26_values-v26.arsc.flat
│  │  │  │          values-v28_values-v28.arsc.flat
│  │  │  │          values-vi_values-vi.arsc.flat
│  │  │  │          values-watch-v20_values-watch-v20.arsc.flat
│  │  │  │          values-watch-v21_values-watch-v21.arsc.flat
│  │  │  │          values-xlarge-v4_values-xlarge-v4.arsc.flat
│  │  │  │          values-zh-rCN_values-zh-rCN.arsc.flat
│  │  │  │          values-zh-rHK_values-zh-rHK.arsc.flat
│  │  │  │          values-zh-rTW_values-zh-rTW.arsc.flat
│  │  │  │          values-zu_values-zu.arsc.flat
│  │  │  │          values_values.arsc.flat
│  │  │  │
│  │  │  ├─merged_res_blame_folder
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  │          └─multi-v2
│  │  │  │                  debug.json
│  │  │  │                  values-af.json
│  │  │  │                  values-am.json
│  │  │  │                  values-ar.json
│  │  │  │                  values-as.json
│  │  │  │                  values-az.json
│  │  │  │                  values-b+sr+Latn.json
│  │  │  │                  values-be.json
│  │  │  │                  values-bg.json
│  │  │  │                  values-bn.json
│  │  │  │                  values-bs.json
│  │  │  │                  values-ca.json
│  │  │  │                  values-cs.json
│  │  │  │                  values-da.json
│  │  │  │                  values-de.json
│  │  │  │                  values-el.json
│  │  │  │                  values-en-rAU.json
│  │  │  │                  values-en-rCA.json
│  │  │  │                  values-en-rGB.json
│  │  │  │                  values-en-rIN.json
│  │  │  │                  values-en-rXC.json
│  │  │  │                  values-es-rUS.json
│  │  │  │                  values-es.json
│  │  │  │                  values-et.json
│  │  │  │                  values-eu.json
│  │  │  │                  values-fa.json
│  │  │  │                  values-fi.json
│  │  │  │                  values-fr-rCA.json
│  │  │  │                  values-fr.json
│  │  │  │                  values-gl.json
│  │  │  │                  values-gu.json
│  │  │  │                  values-h720dp-v13.json
│  │  │  │                  values-hdpi-v4.json
│  │  │  │                  values-hi.json
│  │  │  │                  values-hr.json
│  │  │  │                  values-hu.json
│  │  │  │                  values-hy.json
│  │  │  │                  values-in.json
│  │  │  │                  values-is.json
│  │  │  │                  values-it.json
│  │  │  │                  values-iw.json
│  │  │  │                  values-ja.json
│  │  │  │                  values-ka.json
│  │  │  │                  values-kk.json
│  │  │  │                  values-km.json
│  │  │  │                  values-kn.json
│  │  │  │                  values-ko.json
│  │  │  │                  values-ky.json
│  │  │  │                  values-land.json
│  │  │  │                  values-large-v4.json
│  │  │  │                  values-ldltr-v21.json
│  │  │  │                  values-lo.json
│  │  │  │                  values-lt.json
│  │  │  │                  values-lv.json
│  │  │  │                  values-mk.json
│  │  │  │                  values-ml.json
│  │  │  │                  values-mn.json
│  │  │  │                  values-mr.json
│  │  │  │                  values-ms.json
│  │  │  │                  values-my.json
│  │  │  │                  values-nb.json
│  │  │  │                  values-ne.json
│  │  │  │                  values-night-v8.json
│  │  │  │                  values-nl.json
│  │  │  │                  values-or.json
│  │  │  │                  values-pa.json
│  │  │  │                  values-pl.json
│  │  │  │                  values-port.json
│  │  │  │                  values-pt-rBR.json
│  │  │  │                  values-pt-rPT.json
│  │  │  │                  values-pt.json
│  │  │  │                  values-ro.json
│  │  │  │                  values-ru.json
│  │  │  │                  values-si.json
│  │  │  │                  values-sk.json
│  │  │  │                  values-sl.json
│  │  │  │                  values-sq.json
│  │  │  │                  values-sr.json
│  │  │  │                  values-sv.json
│  │  │  │                  values-sw.json
│  │  │  │                  values-sw600dp-v13.json
│  │  │  │                  values-ta.json
│  │  │  │                  values-te.json
│  │  │  │                  values-th.json
│  │  │  │                  values-tl.json
│  │  │  │                  values-tr.json
│  │  │  │                  values-uk.json
│  │  │  │                  values-ur.json
│  │  │  │                  values-uz.json
│  │  │  │                  values-v16.json
│  │  │  │                  values-v17.json
│  │  │  │                  values-v18.json
│  │  │  │                  values-v21.json
│  │  │  │                  values-v22.json
│  │  │  │                  values-v23.json
│  │  │  │                  values-v24.json
│  │  │  │                  values-v25.json
│  │  │  │                  values-v26.json
│  │  │  │                  values-v28.json
│  │  │  │                  values-vi.json
│  │  │  │                  values-watch-v20.json
│  │  │  │                  values-watch-v21.json
│  │  │  │                  values-xlarge-v4.json
│  │  │  │                  values-zh-rCN.json
│  │  │  │                  values-zh-rHK.json
│  │  │  │                  values-zh-rTW.json
│  │  │  │                  values-zu.json
│  │  │  │                  values.json
│  │  │  │
│  │  │  ├─merged_shaders
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─mixed_scope_dex_archive
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─navigation_json
│  │  │  │  └─debug
│  │  │  │          navigation.json
│  │  │  │
│  │  │  ├─packaged_manifests
│  │  │  │  └─debug
│  │  │  │          AndroidManifest.xml
│  │  │  │          output-metadata.json
│  │  │  │
│  │  │  ├─processed_res
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  │              output-metadata.json
│  │  │  │              resources-debug.ap_
│  │  │  │
│  │  │  ├─project_dex_archive
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  │          │  c33e8c747d74d1a84f419785e60af63897d9343fd80c67c5b4444946ca3b6c29_0.jar
│  │  │  │          │  c33e8c747d74d1a84f419785e60af63897d9343fd80c67c5b4444946ca3b6c29_1.jar
│  │  │  │          │  c33e8c747d74d1a84f419785e60af63897d9343fd80c67c5b4444946ca3b6c29_2.jar
│  │  │  │          │  c33e8c747d74d1a84f419785e60af63897d9343fd80c67c5b4444946ca3b6c29_3.jar
│  │  │  │          │
│  │  │  │          └─com
│  │  │  │              └─example
│  │  │  │                  └─simpleapp
│  │  │  │                          BuildConfig.dex
│  │  │  │                          MainActivity.dex
│  │  │  │
│  │  │  ├─res
│  │  │  │  └─merged
│  │  │  │      └─debug
│  │  │  ├─runtime_symbol_list
│  │  │  │  └─debug
│  │  │  │          R.txt
│  │  │  │
│  │  │  ├─signing_config_versions
│  │  │  │  └─debug
│  │  │  │          signing-config-versions.json
│  │  │  │
│  │  │  ├─sub_project_dex_archive
│  │  │  │  └─debug
│  │  │  │      └─out
│  │  │  ├─symbol_list_with_package_name
│  │  │  │  └─debug
│  │  │  │          package-aware-r.txt
│  │  │  │
│  │  │  └─validate_signing_config
│  │  │      └─debug
│  │  ├─outputs
│  │  │  ├─apk
│  │  │  │  └─debug
│  │  │  │          app-debug.apk
│  │  │  │          output-metadata.json
│  │  │  │
│  │  │  └─logs
│  │  │          manifest-merger-debug-report.txt
│  │  │
│  │  └─tmp
│  │      └─compileDebugJavaWithJavac
│  │              source-classes-mapping.txt
│  │
│  └─src
│      └─main
│          │  AndroidManifest.xml
│          │
│          ├─java
│          │  └─com
│          │      └─example
│          │          └─simpleapp
│          │                  MainActivity.java
│          │
│          └─res
│              ├─layout
│              └─values
├─build
│  └─reports
│      └─problems
│              problems-report.html
│
├─gradle
│  └─wrapper
│          gradle-wrapper.jar
│          gradle-wrapper.properties
│
└─outapp.signed.apkapp.signed.apk.idsigapp.unsigned.apkclasses.dex


http://www.ppmy.cn/ops/156342.html

相关文章

MYSQL简单查询

MYSQL简单查询 完整语法: select [distinct] , … [from [where ] [group by , … [having ] ] [order by asc| desc ] [limit [offset , ] rows ] ] select 简单查询select 1 ; -- 往往用来 做 数据库心跳检测select user() ; -- 获取 当前登录的用户信息sele…

c++ list的front和pop_front的概念和使用案例—第2版

在 C 标准库中,std::list 的 front() 和 pop_front() 是与链表头部元素密切相关的两个成员函数。以下是它们的核心概念和具体使用案例: 1. front() 方法 概念: 功能:返回链表中第一个元素的引用(直接访问头部元素&am…

一文讲解Spring中应用的设计模式

我们都知道Spring 框架中用了蛮多设计模式的: 工厂模式呢,就是用来创建对象的,把对象的创建和使用分开,这样代码更灵活。代理模式呢,是用一个代理对象来控制对真实对象的访问,可以在访问前后做一些处理。单…

【搜索文章】:搜索(es)+ 搜索记录(mongodb)+ 搜索联想词

需求 用户输入关键字时,可以检索出结果, 并且可以查看历史搜索情况, 还可以进行联想词展示。 ElasticSearch(搜索) 准备工作 使用docker安装es,配置ik分词器重新建一个search模块,用来写搜…

【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(二)

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:贪心算法篇–CSDN博客 文章目录 前言例题1.买卖股票的最佳时机2.买卖股票的最佳时机23.k次取…

如何优化垃圾回收机制?

垃圾回收机制 掌握 GC 算法之前,我们需要先弄清楚 3 个问题。第一,回收发生在哪里?第二,对象在 什么时候可以被回收?第三,如何回收这些对象? 回收发生在哪里? JVM 的内存区域中&…

PyTorch Geometric(PyG)机器学习实战

PyTorch Geometric(PyG)机器学习实战 在图神经网络(GNN)的研究和应用中,PyTorch Geometric(PyG)作为一个基于PyTorch的库,提供了高效的图数据处理和模型构建功能。 本文将通过一个节…

7.抽象工厂(Abstract Factory)

抽象工厂与工厂方法极其类似,都是绕开new的,但是有些许不同。 动机 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 假设案例 假设…