Android学习之Build.xml文件

Ant系列-第一个build 题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。【Android思维脑图(技能树)】 阅读详情

近日升级Android SDK至3.2版本,发现ant工具编译失败,仔细检查Build.xml后进行了重新编写,内容修正如下,希望对大家学习Ant有帮助。具体Build.xml内容如下:

具体演示工程参见:点击打开链接,注意积分有点高哦,嘿嘿。。。



<?xml version="1.0" encoding="UTF-8"?>
<!--
	参考文章:
	http://www.cnblogs.com/zuolongsnail/archive/2011/05/25/2058210.html
	http://haya.iteye.com/?show_full=true
	http://jojol-zhou.iteye.com/blog/729271
	http://jojol-zhou.iteye.com/blog/729254
	http://www.cnblogs.com/Pickuper/archive/2011/6/14.html
	http://www.51testing.com/?uid-213912-action-viewspace-itemid-235086
	http://jimmy-duan.iteye.com/blog/1057967
	命名原则:
	(1)使用"."替代local.properties文件中的"-"作为文件分隔符
	(2)前缀:
					使用"jar"表示包
					使用"tools"表示工具
					使用"in"表示输入
					使用"out"表示输出
					使用"release"表示产品
	(3)后缀:使用"dir"表示目录,"file"表示文件
	(3)使用"absolute"表示绝对路径,未使用"absolute"的表示相对路径,所有路径实际使用前转换为绝对路径再使用
	文件及变量使用:
	(1)使用到了系统自带的proguard.cfg文件,用于配置混淆设置
	(2)使用到了系统自带的local.properties文件,用于定义用户设置的本地变量,典型的文件中包含:
		#SDK路径
		sdk-dir=D:\\Android\\android-sdk-windows
		#混淆路径
		proguard=D:\\Android\\proguard\\lib\\proguard.jar
		#jarsiger路径
		jarsigner=D:\\Java\\jdk1.6.0_25\\bin\\jarsigner.exe
		#签名文件
		keystore=D:\\Android\\xxxx.keystore
		keyalias=xxxxx
		password=xxxxxx
		#moto SecondaryTelephonyManager jar包
		secondary-apis-moto-xt882-zip=secondary-apis-moto_xt882.zip
		secondary-apis-moto-xt800plus-zip=secondary-apis-moto_xt800plus.zip
		#QAS SDK包
		appstat-jar=appstat_A1.0.0.7_20110726.jar
		#资源路径
		res-dir=res480x320
		#Manifest文件
		manifest-file=manifest/AndroidManifest.xml
		#UA
		UA=SamsungI569
		#assets路径
		assets-dir=assets${UA}
		#输出路径
		out-release-dir=E:\\tmp
		#版本号
		TYSX_VER=2.1.11.2
		#android版本
		android_ver=AD23
		#文件名
		#TYSX-机型型号(UA)-版本号-厂商缩写-操作系统缩写
		release-apk-file=XXXX-${UA}-${TYSX_VER}-MH-${android_ver}.apk	
-->

<!--
	<project>标签
	每个构建文件对应一个项目。<project>标签时构建文件的根标签。它可以有多个内在属性,
	就如代码中所示,其各个属性的含义分别如下。
	(1) default表示默认的运行目标,这个属性是必须的。
	(2) basedir表示项目的基准目录。
	(3) name表示项目名。
	(4) description表示项目的描述。
	每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有
	自己的构建文件。 
-->
<project name="AntTest" default="release">
	<!--		指定配置文件		-->
	<property file="default.properties" />
	<property file="local.properties" />

	<!--		定义工具目录		-->
	<property name="sdk.dir" value="${sdk-dir}" />
	<property name="android.tools.dir" value="${sdk.dir}/tools" />
	<property name="android.platformtools.dir" value="${sdk.dir}/platform-tools" />
	<property name="android.platforms.dir" value="${sdk.dir}/platforms/${target}" />

	<property name="android.tools.absolute.dir" location="${android.tools.dir}" />
	<property name="android.platformtools.absolute.dir" location="${android.platformtools.dir}" />
	<property name="android.platforms.absolute.dir" location="${android.platforms.dir}" />

	<!--		定义工具		
	<property name="verbose" value="false" />-->
	<condition property="exe" value=".exe" else="">
		<os family="windows" />
	</condition>
	<property name="jar.proguard" value="${proguard-jar}" />
	<property name="jar.android" value="${android.platforms.absolute.dir}/android.jar" />
	<property name="tools.dx" value="${android.platformtools.absolute.dir}/dx.bat" />
	<property name="tools.apkbuilder" value="${android.tools.absolute.dir}/apkbuilder.bat" />
	<property name="tools.adb" value="${android.tools.absolute.dir}/adb${exe}" />
	<property name="tools.zipalign" value="${android.tools.absolute.dir}/zipalign${exe}" />
	<property name="tools.aapt" value="${android.platformtools.absolute.dir}/aapt${exe}" />
	<property name="tools.aidl" value="${android.platformtools.absolute.dir}/aidl${exe}" />
	<property name="tools.jarsigner" value="${JAVA_HOME}/bin/jarsigner${exe}" />
	
	<!--		定义引入工具库			
	<path id="android.antlibs">
		<pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
		<pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
		<pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
		<pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
		<pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
	</path>
			定义任务		
	<taskdef name="aaptexec" classname="com.android.ant.AaptExecLoopTask" classpathref="android.antlibs" />
	<taskdef name="apkbuilder" classname="com.android.ant.ApkBuilderTask" classpathref="android.antlibs" />
	<taskdef name="xpath" classname="com.android.ant.XPathTask" classpathref="android.antlibs" />
	-->

	<!--		定义源代码及资源等输入目录		-->
	<property name="in.source.dir" value="src" />
	<property name="in.resource.dir" value="${res-dir}" />
	<property name="in.asset.dir" value="${assets-dir}" />

	<property name="in.source.absolute.dir" location="${in.source.dir}" />
	<property name="in.resource.absolute.dir" location="${in.resource.dir}" />
	<property name="in.asset.absolute.dir" location="${in.asset.dir}" />

	<!--		定义本地库/第三方工具库文件目录		-->
	<property name="in.external.libs.dir" value="libs" />
	<property name="in.native.libs.dir" value="libs" />

	<property name="in.external.libs.absolute.dir" location="${in.external.libs.dir}" />
	<property name="in.native.libs.absolute.dir" location="${in.native.libs.dir}" />

	<!--		定义输入文件		-->
	<property name="in.manifest.file" value="${manifest-file}" />
	<property name="in.android.aidl.file" value="${android.platforms.dir}/framework.aidl" />

	<property name="in.manifest.absolute.file" location="${in.manifest.file}" />
	<property name="in.android.aidl.absolute.file" location="${in.android.aidl.file}" />

	<!--		定义输出文件目录	-->
	<property name="out.gen.dir" value="gen" />
	<property name="out.dir" value="bin" />
	<property name="out.classes.dir" value="${out.dir}/classes" />

	<property name="out.gen.absolute.dir" location="${out.gen.dir}" />
	<property name="out.absolute.dir" location="${out.dir}" />
	<property name="out.classes.absolute.dir" location="${out.classes.dir}" />
	<property name="release.absolute.dir" location="${release-dir}" />

	<!--		定义输出文件			-->
	<property name="out.dex.file" value="${ant.project.name}-classes.dex" />
	<property name="out.resource.package.file" value="${ant.project.name}-resource.apk" />
	<property name="out.unsigned.package.file" value="${ant.project.name}-unsigned.apk" />
	<property name="out.signed.package.file" value="${ant.project.name}-signed.apk" />
	<property name="out.aligned.package.file" value="${ant.project.name}-aligned.apk" />
	<property name="release.package.file" value="${release-apk-file}" />

	<property name="out.dex.absolute.file" location="${out.dir}/${out.dex.file}" />
	<property name="out.resource.package.absolute.file" location="${out.dir}/${out.resource.package.file}" />
	<property name="out.unsigned.package.absolute.file" location="${out.dir}/${out.unsigned.package.file}" />
	<property name="out.signed.package.absolute.file" location="${out.dir}/${out.signed.package.file}" />
	<property name="out.aligned.package.absolute.file" location="${out.dir}/${out.aligned.package.file}" />
	<property name="release.package.absolute.file" location="${release.absolute.dir}/${release.package.file}" />


	<!--
		<target>标签
		一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例
		如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必
		须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。
			(1)name表示标明,这个属性是必须的。
			(2)depends表示依赖的目标。
			(3)if表示仅当属性设置时才执行。
			(4)unless表示当属性没有设置时才执行。
			(5)description表示项目的描述。
		Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行
		每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的
		depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执
		行的顺序是prepare->compile->run。
		一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总
		会被执行。 	
-->
	<target name="-clean">
		<echo>Creating output directories if needed...</echo>
		<delete dir="${out.absolute.dir}" />
		<delete dir="${out.gen.absolute.dir}" />
	</target>

	<target name="-dirs" depends="-clean">
		<echo>Creating output directories if needed...</echo>
		<mkdir dir="${in.resource.absolute.dir}" />
		<mkdir dir="${in.external.libs.absolute.dir}" />
		<mkdir dir="${out.gen.absolute.dir}" />
		<mkdir dir="${out.absolute.dir}" />
		<mkdir dir="${out.classes.absolute.dir}" />
	</target>

	<!--
		第一步 生成R.java类文件:
		Eclipse中会自动生成R.java,ant和命令行使用android SDK提供的aapt.ext程序生成R.java。
	-->
	<target name="-resource-src" depends="-dirs">
		<echo>Generating R.java / Manifest.java from the resources...</echo>
		<exec executable="${tools.aapt}" failonerror="true">
			<arg value="package" />
			<arg value="-m" />
			<arg value="-J" />
			<arg path="${out.gen.absolute.dir}" />
			<arg value="-M" />
			<arg path="${in.manifest.absolute.file}" />
			<arg value="-S" />
			<arg path="${in.resource.absolute.dir}" />
			<arg value="-I" />
			<arg path="${jar.android}" />
		</exec>
	</target>

	<!--
		第二步 将.aidl文件生成.java类文件:
		Eclipse中自动生成,ant和命令行使用android SDK提供的aidl.exe生成.java文件。 
	-->
	<!-- Generates java classes from .aidl files. -->
	<target name="-aidl" depends="-dirs">
		<echo>Compiling aidl files into Java classes...</echo>
		<apply executable="${tools.aidl}" failonerror="true">
			<arg value="-p${in.android.aidl.file}" />
			<arg value="-I${in.source.absolute.dir}" />
			<arg value="-o${out.gen.absolute.dir}" />
			<fileset dir="${in.source.absolute.dir}">
				<include name="**/*.aidl" />
			</fileset>
		</apply>
	</target>

	<!--
		第三步 编译.java类文件生成class文件:
		Eclipse中自动生成,ant和命令行使用jdk的javac编译java类文件生成class文件。 
		 -->
	<!-- Compiles this project's .java files into .class files. -->
	<target name="compile" depends="-resource-src, -aidl" >
		<echo>Compiles project's .java files into .class files</echo>
		<javac encoding="utf-8" target="1.5" debug="true" extdirs="" srcdir="." 
			destdir="${out.classes.absolute.dir}" bootclasspath="${jar.android}">
			<classpath>
				<fileset dir="${in.external.libs.absolute.dir}" includes="*.jar" />
				<fileset dir="${in.external.libs.absolute.dir}" includes="*.zip" />
			</classpath>
		</javac>
	</target>

	<!--Execute proguard class flies-->
	<target name="optimize" depends="compile">
		<echo>optimize classes are put to "${out.absolute.dir}"	.</echo>
		<jar basedir="${out.classes.absolute.dir}" destfile="${out.absolute.dir}/temp.jar"/>
		<taskdef resource="proguard/ant/task.properties"  classpath="${jar.proguard}" />
		<proguard>  
		    -injars					${out.absolute.dir}/temp.jar   
		    -outjars					${out.absolute.dir}/optimized.jar
		    -libraryjars				${jar.android}   
		  	-optimizationpasses 5
		  	-dontusemixedcaseclassnames
		  	-dontskipnonpubliclibraryclasses
		  	-dontpreverify
		  	-verbose
		  	-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
		  	-include proguard.cfg		  	
		  </proguard>
		<delete file="${out.absolute.dir}/temp.jar"/>
		<delete dir="${out.classes.dir}" failonerror="false" />
		<mkdir dir="${out.classes.dir}"/>
		<unzip src="${out.absolute.dir}/optimized.jar" dest="${out.classes.absolute.dir}"/>
		<delete file="${out.absolute.dir}/optimized.jar"/>
	</target>

	<!--
		第四步 将class文件打包生成classes.dex文件:
		Eclipse中自动生成,ant和命令行使用android SDK提供的dx.bat命令行脚本生成classes.dex文件。 
	-->
	<target name="dex" depends="optimize">
		<echo>Converting compiled files and external libraries into ${out.absolute.dir}/${out.dex.file}    ...</echo>
		<apply executable="${tools.dx}" failonerror="true" parallel="true">
			<arg value="--dex" />
			<arg value="--output=${out.dex.absolute.file}" />
			<arg path="${out.classes.absolute.dir}" />
			<fileset dir="${in.external.libs.absolute.dir}" includes="*.jar"/>
		</apply>
		<delete dir="${out.classes.absolute.dir}"/>
	</target>

	<!--
		第五步 打包资源文件(包括res、assets、androidmanifest.xml等):
		Eclipse中自动生成,ant和命令行使用Android SDK提供的aapt.exe生成资源包文件。 
	-->
	<target name="package-resource">
		<echo>Packaging resources and assets ${out.resource.package.absolute.file}	...</echo>
		<exec executable="${tools.aapt}" failonerror="true">
			<arg value="package" />
			<arg value="-f" />
			<arg value="-M" />
			<arg value="${in.manifest.file}" />
			<arg value="-S" />
			<arg value="${in.resource.absolute.dir}" />
			<arg value="-A" />
			<arg value="${in.asset.absolute.dir}" />
			<arg value="-I" />
			<arg value="${jar.android}" />
			<arg value="-F" />
			<arg value="${out.resource.package.absolute.file}" />
		</exec>
	</target>

	<!--
		第六步 生成未签名的apk安装文件:
		Eclipse中自动生成debug签名文件存放在bin目录中,ant和命令行使用android SDK提供的apkbuilder.bat命令脚本生成未签名的apk安装文件。 
	-->
	<!-- Package the application without signing it.  This allows for the application to be signed later with an official publishing key. -->
	<target name="package" depends="dex, package-resource">
		<echo>Packaging ${out.unsigned.package.absolute.file} for release...</echo>
		<exec executable="${tools.apkbuilder}" failonerror="true">
			<arg value="${out.unsigned.package.absolute.file}" />
			<arg value="-u" />
			<arg value="-z" />
			<arg value="${out.resource.package.absolute.file}" />
			<arg value="-f" />
			<arg value="${out.dex.absolute.file}" />
			<arg value="-rf" />
			<arg value="${in.source.absolute.dir}" />
			<arg value="-rj" />
			<arg value="${in.external.libs.absolute.dir}" />
		</exec>
		<echo>It will need to be signed with jarsigner before being published.</echo>
		<delete file="${out.resource.package.absolute.file}" />		
		<delete file="${out.dex.absolute.file}" />		
	</target>

	<!--
		第七步 对未签名的apk进行签名生成签名后的android文件:
	-->
	<!-- Package the application without signing it.  This allows for the application to be signed later with an official publishing key. -->
	<target name="jarsigner" depends="package">
		<echo>Packaging ${out.unsigned.package.absolute.file} for release...</echo>
		<exec executable="${tools.jarsigner}" failonerror="true">
			<arg value="-keystore" />
			<arg value="${keystore}" />
			<arg value="-storepass" />
			<arg value="${password}" />
			<arg value="-keypass" />
			<arg value="${password}" />
			<arg value="-signedjar" />
			<arg value="${out.signed.package.absolute.file}" />
			<arg value="${out.unsigned.package.absolute.file}" />
			<arg value="${keyalias}" />
		</exec>
		<delete file="${out.unsigned.package.absolute.file}" />
	</target>

	<!--
		第七步 签名的文件进行字节对齐;
	-->
	<target name="zipalign" depends="jarsigner">
		<echo>Zipalign ${out.aligned.package.absolute.file} for release...</echo>
		<exec executable="${tools.zipalign}">
			<arg value="-f" />
			<arg value="-v" />
			<arg value="4" />
			<arg value="${out.signed.package.absolute.file}" />
			<arg value="${out.aligned.package.absolute.file}" />
		</exec>
		<delete file="${out.signed.package.absolute.file}" />
	</target>

	<!--
		第八步 签名的文件进行字节对齐;
	-->
	<target name="release" depends="zipalign">
		<copy tofile="${release.package.absolute.file}">
			<fileset dir="${out.absolute.dir}" includes="${out.aligned.package.file}"/>
		</copy>
		<delete file="${out.aligned.package.absolute.file}" />
	</target>


</project>


Android速成day01 Android速成第一天记录,需要点java基础学习Android是最好的,如果学习过前端三件套,Android的xml页面学习也是非常容易理解的。以上就是今天接触的项目结构。 阅读详情

相关推荐

从零学Android(一)、创建第一个Android应用

在开始创建我们的第一个Android应用之前,我们必须先保证已经安装好了Android Studio并且安装好了Android SDK。 使用Android Studio创建一个项目 如果你之前没有使用Android Studio打开过项目,那么当你打开Android Studio的时候,你会进入到欢迎页面,在这个页面中点击Start a new Android Studio proj

Coder_Jim的博客 975

java build.xml_build.xml详解

Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。一.安装与配置下载地址:http://ant.apache.org/,在本文中下载的是1.7.0版本。解压到某个目录(例如E:"apache-ant-1.7.0),即可使用。添加系统环境变量:ANT_HO...

weixin_31714033的博客 4171

build.xml详解

<!-- 文档结构为: 全局变量的定义 ... 任务组(tasks) 一项javac任务 ... 一项其它任务

build.xml是什么

一般情况下,大多数软件公司做开发的时候都不用myeclipse开发,这是利用ant部署就给我们带来极大的方便,它先将你的project打包成war包,然后部署到指定的服务器中。 Ant的概念 当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处...

张永胜 1万+

build.xml文件

构建自动化测试平台的时候需要新建的build.xml文件

项目build.xml文件

NULL 博文链接:https://nassir.iteye.com/blog/1104589

标准笔记安卓经典版(已废弃)安装与使用教程

标准笔记安卓经典版(已废弃)安装与使用教程 本教程基于Standard Notes Android Classic项目,一个已经废弃的开源应用。尽管该项目已被新版本取代,但这里我们将探讨其目录结构、启动文件以及配置文件,以供学习和历史参考。 1. 项目目录结构及介绍 Standard Notes Android Classic 的目录结构遵循典型的Android应用结构: app: 应用的主要模...

gitblog_00389的博客 1035

TDR阻抗会爬坡? 别担心,不是你的错,你只是不够了解TDR!

TDR除了可以单靠一个Port就得到通道的阻抗外,其实也可以拿来计算传输线的Delay,或是两两对象之间的距离,甚至是拿来求得等效介电常数!

jkh920184196的博客 2159

AndroidSDK内置ANT编译build.xml

Android SDK的内置ant编译build文件 在sdk目录的tools/ant/文件夹下,对学习ANT编译过程很是一个很好的参考。 <!-- This build file is imported by the project build file. It contains all the targets and tasks neces

snowd的专栏 8004

STM32+OpenCV云台PID调参实战:从震荡到丝滑跟踪的进阶之路

本文详细介绍了基于STM32和OpenCV的跟踪云台PID调参实战经验。从硬件搭建、PID控制原理到调参技巧,系统讲解了如何通过调整比例、积分和微分参数解决系统震荡问题,实现从震荡到丝滑跟踪的进阶过程,特别适合电赛和嵌入式视觉控制开发者参考。

tgb3456789的博客 715

保姆级教程:用Cesium的Primitive API实现火箭发射全流程动画(含代码避坑)

本文详细介绍了如何使用Cesium的Primitive API实现火箭发射全流程动画,包括模型控制、关节动画和精细时序管理。通过实战代码示例和性能优化技巧,帮助开发者高效构建高复杂度航天仿真系统,显著提升三维可视化效果与运行效率。

weixin_42565652的博客 212

【开源项目教程】FederatedAndroidTrainer: 联邦学习在Android上的实现

【开源项目教程】FederatedAndroidTrainer: 联邦学习在Android上的实现 欢迎来到 FederatedAndroidTrainer 的实践指南,此项目是基于GitHub上一个专注于在Android设备上实施联邦学习的开源实现(请注意,提供的链接并非真实的GitHub地址,实际操作时应替换为正确的开源项目链接)。下面我们将分步骤介绍如何探索这个项目,包括其目录结构、启动文件...

gitblog_00817的博客 424

摄像头模组CCM简介

摄像头模组,全称Camera Compact Module,简写为CCM。CCM 包含几大件: 镜头(lens)、音圈马达(VCM)、传感器(sensor)、软板(FPC)、图像处理芯片(DSP)。工作原理:物体通过镜头(lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。摄像头模组主要由以下几个部分组成:镜头(Lens):将光线汇聚到图像传感器上。

m0_73482095的博客 1万+

软件专业学习问题总结--Android studio篇

下载完VMware了却出现“与vmx86驱动程序的版本不匹配:预期为417.0,实际为416.0”的问题,这时可以搜索是否有上次VMware未卸载干净的残留文件:vmx86.sys,搜索路径为:C->Windows->System32->drivers->vmx86.sys,将它删掉就好,若提示文件正在使用中无法删除,可以先将其改名为oldvmx86.sys,然后重新下载VMware Workstation Pro即可。2、操作系统原理的VMware安装问题。

2303_80046451的博客 343

编译hive-3.1.3(3.0.0)和编译tez-0.10.2适配hadoop-3.3.4以及hadoop-3.2.2(附安装包)

编译hive-3.1.3(3.0.0)和编译tez-0.10.2适配hadoop-3.3.4以及hadoop-3.2.2(附安装包)

2301_77356579的博客 2596

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7746

Android第三方开发包值高德地图SDK使用介绍

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。以上分享【Android开发中高级必知必会核心知识笔记】七大模块整套学习资料均免费分享,需要的小伙伴,我已经上传到GitHub了,大家自取就可以了。白嫖可以,别忘了给我点个关注哈。

1602

103.在 Vue 3 中使用 OpenLayers 控制图层来显示/隐藏地图

是一个强大的开源库,可以用于构建各种地理信息系统应用。在 Vue 3 中,我们可以结合。方法,可以直接控制某个图层是否可见,而不需要删除或重新创建图层。在开始之前,确保你已经搭建了 Vue 3 项目,并安装了。本文将详细介绍如何在 Vue 3 组合式 API (,并实现按钮控制地图的显示/隐藏功能。会导致 OSM 瓦片地图无法加载。方法控制地图图层的显示与隐藏。安装完成后,即可开始编写代码。在本教程中,我们介绍了如何在。来实现地图的显示/隐藏功能。来实现交互式地图,并通过。在 WebGIS 开发中,

小彭的博客 1560

android studio 4.1.1 创建的Kotlon项目无法直接使xml的ID

在B站上学习 Android零基础教程(Kotlin)——手把手教开发今日头条在学习mvp架构搭建时 up主的说 kotlin能直接使用xml中的id,我实操时发现无法直接使用 ###解决方法:在对应的module配置文件中加上如下代码即可 plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-android-extensions' // 加上这段配置即可 } ...

qq_29254653的博客 464

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: Android界面布局实例
下一篇: Android演示数据库操作
Soloman
博客等级 码龄25年 171粉丝 159原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值