Android学习20 -- 手搓App2(Gradle)
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
相关文章:

Android学习20 -- 手搓App2(Gradle)
1 前言 昨天写了一个完全手搓的:Android学习19 -- 手搓App-CSDN博客 后面谷歌说不要用aapt,d8这些来搞。其实不想弄Gradle的,不过想着既然开始了,就多看一些。之前写过一篇Gradle,不过是最简单的编译,不涉…...

LeetCode - Google 大模型10题 第2天 Position Embedding(位置编码) 3题
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145454489 在 Transformer 架构中,位置编码(Position Embedding) 是辅助模型理解序列中元素顺序的关键机制。绝对位置编码(Absolute P…...

PostgreSQL 数据库备份与还原
为了安全与数据共享等,创建好的数据库有时候需要备份操作和还原操作。数据库的备份与还原主要是三个命令:pg_dump、pg_dumpall 和 pg_restore 。 其中pg_dump用于备份单个数据库,它支持多种备份格式(SQL、自定义等)&a…...

proxmox通过更多的方式创建虚拟机
概述 作为一名资深运维工程师,我们经常需要在 Proxmox 虚拟化平台上创建和管理虚拟机。本文将介绍三种不同的方式在 Proxmox 上创建 Ubuntu 虚拟机: 通过 Proxmox 命令创建虚拟机通过 Shell 脚本自动化创建虚拟机使用 Proxmox API 创建虚拟机 每种方式…...

WordPress使用(2)
上一篇文章讲述了WordPress的基本安装,主要是docker方式的处理。本文章主要介绍WordPress安装后的其他设置。 1. 安装后设置 安装后碰到的第一个需求就是安装一个合适的主题,但WordPress默认的上传文件大小是2M,远远无法满足要求࿰…...
git中文件的状态状态切换
文件的状态分类 Git 中文件的状态主要分为以下几种: Untracked(未跟踪) 定义:这些文件从未被 Git 跟踪过,通常是因为它们是新创建的文件,或者被 .gitignore 排除在外。 示例:新创建的文件 new…...
解决php8.3无法加载curl扩展
把它的值更改为扩展存在的目录的绝对路径(扩展存在的目录为有php_xxx.dll存在的目录) extension_dir "e:\serv\php83\ext" 然后从php根目录复制 libssh2.dll 和 libcrypto-*.dll 和 libssl-*.dll 到Apache根目录下的bin目录 重启apache服务即可...
三路排序算法
三路排序算法 引言 排序算法是计算机科学中基础且重要的算法之一。在数据分析和处理中,排序算法的效率直接影响着程序的执行速度和系统的稳定性。本文将深入探讨三路排序算法,包括其原理、实现和应用场景。 一、三路排序算法的原理 三路排序算法是一…...

入行FPGA设计工程师需要提前学习哪些内容?
FPGA作为一种灵活可编程的硬件平台,广泛应用于嵌入式系统、通信、数据处理等领域。很多人选择转行FPGA设计工程师,但对于新手来说,可能在学习过程中会遇到一些迷茫和困惑。为了帮助大家更好地准备,本文将详细介绍入行FPGA设计工程…...

DBASE DBF数据库文件解析
基于Java实现DBase DBF文件的解析和显示 JDK19编译运行,实现了数据库字段和数据解析显示。 首先解析数据库文件头代码 byte bytes[] Files.readAllBytes(Paths.get(file));BinaryBufferArray bis new BinaryBufferArray(bytes);DBF dbf new DBF();dbf.VersionN…...

html基本结构和常见元素
html5文档基本结构 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>文档标题</title> </head> <body>文档正文部分 </body> </html> html文档可分为文档头和文档体…...

JAVAweb学习日记(十) Mybatis入门操作
一、介绍 二、快速入门程序 三、入门-数据库连接池 四、入门-lombok工具包...

从Transformer到世界模型:AGI核心架构演进
文章目录 引言:架构革命推动AGI进化一、Transformer:重新定义序列建模1.1 注意力机制的革命性突破1.2 从NLP到跨模态演进1.3 规模扩展的黄金定律 二、通向世界模型的关键跃迁2.1 从语言模型到认知架构2.2 世界模型的核心特征2.3 混合架构的突破 三、构建…...

Rk3588芯片介绍(含数据手册)
芯片介绍:RK3588是一款低功耗,高性能的处理器,适用于基于arm的PC和边缘计算设备,个人移动互联网设备和其他数字多媒体应用,集成了四核Cortex-A76和四核Cortex-A55以及单独的NEON协处理器 视频处理方面:提供…...
java开发面试自我介绍模板_java面试自我介绍3篇
java 面试自我介绍 3 篇 java 面试自我介绍篇一: 我叫赵,我的同学更都喜欢称呼我的英文名字,叫,六月的 意思,是君的谐音。我来自安徽的市,在 21 年我以市全市第一名 的成绩考上了大学,…...

w193基于Spring Boot的秒杀系统设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...

chrome浏览器chromedriver下载
chromedriver 下载地址 https://googlechromelabs.github.io/chrome-for-testing/ 上面的链接有和当前发布的chrome浏览器版本相近的chromedriver 实际使用感受 chrome浏览器会自动更新,可以去下载最新的chromedriver使用,自动化中使用新的chromedr…...

【HTML入门】Sublime Text 4与 Phpstorm
文章目录 前言一、环境基础1.Sublime Text 42.Phpstorm(1)安装(2)启动Phpstorm(3)“启动”码 二、HTML1.HTML简介(1)什么是HTML(2)HTML版本及历史(3)HTML基本结构 2.HTML简单语法(1)HTML标签语法(2)HTML常用标签(3)表格(4)特殊字符 总结 前言 在当今的软件开发领域,…...

Python----Python高级(并发编程:进程Process,多进程,进程间通信,进程同步,进程池)
一、进程Process 拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度;进程切换需要的资源很最大,效率低。 对于操作系统来说,一个任务就是一个进程(Process)ÿ…...
汽车自动驾驶AI
汽车自动驾驶AI是当前汽车技术领域的前沿方向,以下是关于汽车自动驾驶AI的详细介绍: 技术原理 感知系统:自动驾驶汽车通过多种传感器(如激光雷达、摄像头、雷达、超声波传感器等)收集周围环境的信息。AI算法对这些传感…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...