Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android Gradle必备基础知识

Android Gradle必备基础知识

原创
作者头像
xiangzhihong
修改于 2021-07-21 10:07:32
修改于 2021-07-21 10:07:32
9490
举报
文章被收录于专栏:向治洪向治洪

随着GoogleEclipse的无情抛弃以及Studio的不断壮大,Android开发者逐渐拜倒在Studio的石榴裙下。 而作为Studio的默认编译方式,Gradle已逐渐普及。我最开始是被它的多渠道打包所吸引。

简介


Gradle是以Groovy语言为基础,面向Java应用为主。基于DSL(Domain Specific Language)语法的自动化构建工具。

Gradle集合了Ant的灵活性和强大功能,同时也集合了Maven的依赖管理和约定,从而创造了一个更有效的构建方式。凭借GroovyDSL和创新打包方式,Gradle提供了一个可声明的方式,并在合理默认值的基础上描述所有类型的构建。 Gradle目前已被选作许多开源项目的构建系统。

因为Gradle是基于DSL语法的,如果想看到build.gradle文件中全部可以选项的配置,可以看这里

DSL Reference

基本的项目设置


一个Gradle项目通过一个在项目根目录中的build.gradle文件来描述它的构建。

简单的Build文件

最简单的Android应用中的build.gradle都会包含以下几个配置:

Project根目录的build.gradle:

代码语言:txt
AI代码解释
复制
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

Module中的build.gradle:

代码语言:txt
AI代码解释
复制
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    ...
}
  • buildscript { ... }配置了编译时的代码驱动. 这种情况下,它声明所使用的是jCenter仓库。还有一个声明所依赖的在Maven文件的路径。这里声明的包含了Android插件所使用的1.5.0版本的Gradle. 注意:这只会影响build中运行的代码,不是项目中。项目中需要声明它自己所需要仓库和依赖关系。
  • apply plugin : com.android.application,声明使用com.androdi.application插件。这是构建Android应用所需要的插件。
  • android{...}配置了所有Android构建时的参数。默认情况下,只有编译的目标版本以及编译工具的版本是需要的。

重要: 这里只能使用com.android.application插件。如果使用java插件将会报错。

目录结构

module/src/main下的目录结构,因为有时候很多人把so放到libs目录就会报错:

  • java/
  • res/
  • AndroidManifest.xml
  • assets/
  • aidl/
  • jniLibs/
  • jni/
  • rs/

配置目录结构

如果项目的结构不标准的时候,可能就需要去配置它。Android插件使用了相似的语法,但是因为它有自己的sourceSets,所以要在android代码块中进行配置。下面就是一个从Eclipse的老项目结构中配置主要代码并且将androidTestsourceSet设置给tests目录的例子:

代码语言:txt
AI代码解释
复制
android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        androidTest.setRoot('tests')
    }
}

就像有些人就是要把so放到libs目录中(这类人有点犟),那就需要这样进行修改。

注意:因为在旧的项目结构中所有的源文件(Java,AIDLRenderScript)都放到同一个目录中,我们需要将sourceSet中的这些新部件都设置给src目录。

Build Tasks


对构建文件声明插件时通常或自动创建一些列的构建任务去执行。不管Java插件还是Android插件都是这样。Android常规的任务如下:

  • assemble生成项目output目录中的内容的任务。
  • check执行所有的检查的任务。
  • build执行assemblecheck的任务。
  • clean清理项目output目录的任务。

Android项目中至少会有两种output输出:一个debug apk和一个release apk。他们都有自己的主任务来分别执行构建:

  • assemble
    • assembleDebug
    • assembleRelease

提示:Gradle支持通过命令行执行任务首字母缩写的方式。例如:

在没有其他任务符合aR的前提下,gradle aRgradle assembleRelease是相同的。

最后,构建插件创建了为所有build type(debug, release, test)类型安装和卸载的任务,只要他们能被安装(需要签名)。

  • installDebug
  • installRelease
  • uninstallAll
    • uninstallDebug
    • uninstallRelease
    • uninstallDebugAndroidTest

基本的Build定制

Android插件提供了一些列的DSL来让直接从构建系统中做大部分的定制。

Manifest整体部分

DSL提供了很多重要的配置manifest文件的参数,例如:

  • minSdkVersion
  • targetSdkVersion
  • versionCode
  • versionName
  • applicationId
  • testApplicationId
  • testInstrumentationRunnder

Android Plugin DSL Reference提供了一个完整的构建参数列表。

把这些manifest属性放到build文件中的一个重要功能就是它可以被动态的设置。例如,可以通过读取一个文件或者其他逻辑来获取版本名称。

代码语言:txt
AI代码解释
复制
def computeVersionName() {
    ...
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"


    defaultConfig {
        versionCode 12 
        versionName computeVersionName()
        minSdkVersion 16
        targetSdkVersion 23
    }
}

注意:不要使用可能与现有给定冲突的方法名。例如defaultConfig{...}中使用getVersionName()方法将会自动使用defaultConfig.getVersionName()来带起自定义的方法。

Build Types

默认情况下Android插件会自动将应用程序设置成有一个debug版本和一个release版本。

这就是通过调用BuildType对象完成。默认情况下会创建两个实例,一个debug实例和一个release实例。Android插件同样允许通过其他的Build Types来定制其他的实例。这就是通过buildTypes来设置的:

代码语言:txt
AI代码解释
复制
android {
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }


        jnidebug {
            initWith(buildTypes.debug)
            applicationIdSuffix ".jnidebug"
            jniDebuggable true
        }
    }
}

上面的代码执行了以下操作:

  • 配置了默认debugBuild Type:
    • 设置了它的applicationId。这样debug模式就能与release模式的apk同时安装在同一手机上。
  • 创建了一个新的jnidebugBuild Type,并且把它设置为debug的拷贝。
  • 通过允许JNI组件的debug和增加一个新的包名后缀来继续定制该Build Type

不管使用initWith()还是使用其他的代码块,创建一个新的Build Types都是非常简单的在buildTypes代码块中创建一个新的元素就可以了。

签名配置

为应用签名需要使用如下几个部分:

  • A keystore
  • A keystore password
  • A key alias name
  • A key password
  • The store type

默认情况下有一个debug的配置,设置了一个debugkeystore,有一个已知的密码。debug keystore的位置是在$HOME/.android/debug.keystore,如果没有的话他会被默认创建。DebugBuild Type会默认使用该debug的签名设置。

当然也可以通过使用DSL语法中的signingconfigs部分来创建其他的配置来进行定制:

代码语言:txt
AI代码解释
复制
android {
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }


        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }


    buildTypes {
        foo {
            signingConfig signingConfigs.myConfig
        }
    }
}

上面的设置将把debug keystore的位置改为项目的根目录。同样也创建了一个新的签名配置,并且有一个新的Build Type使用它。

Dependencies, Android Libraries and Multi-project setup

Gradle项目可以依赖其他的外部二进制包、或者其他的Gradle项目。

本地包

想要配置依赖一个外部jar包,需要在compile的配置中添加一个dependency。下面的配置是添加了所有在libs目录的jar包:

代码语言:txt
AI代码解释
复制
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}


android {
    ...
}

注意:DSL元素中的dependenciesGradle API中的标准元素。不属于andorid元素。

compile配置是用来编译主应用的。它配置的所有部分都会被打包到apk中。当然也有一些其他的配置:

  • compile: main application
  • androidTestCompile:test application
  • debugCompile:debug Build Type
  • release Compile:release Build Type

当然我们可以使用compile<buildtype>.compile这两种配置。创建一个新的Build Type通常会自动基于它的名字创建一个新的配置部分。这样在像debug版本而release版本不适用的一些特别的library时非常有用。

远程仓库

Gradle只是使用MavenIvy仓库。但是仓库必须要添加到列表中,并且必须声明所依赖仓库的Maven或者Ivy定义。

代码语言:txt
AI代码解释
复制
repositories {
     jcenter()
}


dependencies {
    compile 'com.google.guava:guava:18.0'
}


android {
    ...
}

注意:jcenter()是指定仓库URL的快捷设置。Gradle支持远程和本地仓库。

注意:Gradle会直接识别所有的依赖关系。这就意味着如果一个依赖库自身又依赖别的库时,他们会被一起下下来。

本地AAR
代码语言:txt
AI代码解释
复制
dependencies {
	compile(name:'本地aar库的名字,不用加后缀', ext:'aar')
}
多项目设置

Gradle项目通常使用多项目设置来依赖其他的gradle项目。例如:

  • MyProject/
    • app/
    • libraries/
      • lib1/
      • lib2/

Gradle会通过下面的名字来引用他们:

:app

:libraries:lib1

:libraries:lib2

每个项目都会有一个单独的build文件,并且在项目的根目录还会有一个setting.gradle文件:

  • MyProject/
    • settings.gradle
    • app/
      • build.gradle
    • libraries/
      • lib1/
        • build.gradle
      • lib2/
        • build.gradle

setting.gradle文件中的内容非常简单。它指定了哪个目录是Gralde项目:

代码语言:txt
AI代码解释
复制
include ':app', ':libraries:lib1', ':libraries:lib2'

:app这个项目可能会依赖其他的libraries,这样可以通过如下进行声明:

代码语言:txt
AI代码解释
复制
dependencies {
     compile project(':libraries:lib1')
}

Library项目

上面用到了:libraries:lib1:libraries:lib2可以是Java项目,:app项目会使用他们俩的输出的jar包。但是如果你需要使用android资源等,这些libraries就不能是普通的Java项目了,他们必须是Android Library项目。

创建一个Library项目

Library项目和普通的Android项目的区别比较少,由于libraries的构建类型与应用程序的构建不同,所有它会使用一个别的构建插件。但是他们所使用的插件内部有很多相同的代码,他们都是由com.android.tools.build.gradle这个jar包提供的。

代码语言:txt
AI代码解释
复制
buildscript {
    repositories {
        jcenter()
    }


    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.1'
    }
}


apply plugin: 'com.android.library'


android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
}
普通项目与Library项目的区别

Library项目的主要输出我.aar包。它结合了代码(例如jar包或者本地.so文件)和资源(manifest,res,assets)。每个library也可以单独设置Build Type等来指定生成不同版本的aar

Lint Support

你可以通过指定对应的变量来设置lint的运行。可以通过添加lintOptions来进行配置:

代码语言:txt
AI代码解释
复制
android {
    lintOptions {
        // turn off checking the given issue id's
        disable 'TypographyFractions','TypographyQuotes'

        // turn on the given issue id's
        enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'

        // check *only* the given issue id's
        check 'NewApi', 'InlinedApi'
    }
}

Build变量

构建系统的一个目标就是能对同一个应用创建多个不同的版本。

Product flavors

一个product flavor可以针对一个项目制定不同的构建版本。一个应用可以有多个不同的falvors来改变生成的应用。

Product flavors是通过DSL语法中的productFlavors来声明的:

代码语言:txt
AI代码解释
复制
android {
    ....


    productFlavors {
        flavor1 {
            ...
        }


        flavor2 {
            ...
        }
    }
}
Build Type + Product Flavor = Build Variant

像我们之前看到的,每个Build Type都会生成一个apk.Product Flavors也是同样的:项目的输出僵尸所有Build TypesProduct Flavors的结合。每种结合方式称之为Build Variant。例如,如果有debugrelease版本的Build Types,上面的例子就会生成4种Build Variants

  • Flavor1 - debug
  • Flavor1 - release
  • Flavor2 - debug
  • Flavor2 - release

没有配置flavors的项目仍然有Build Variants,它只是用了一个默认的flavor/config,没有名字,这导致variants的列表和Build Types的列表比较相同。

Product Flavor配置
代码语言:txt
AI代码解释
复制
android {
    ...


    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }


    productFlavors {
        flavor1 {
            applicationId "com.example.flavor1"
            versionCode 20
         }


         flavor2 {
             applicationId "com.example.flavor2"
             minSdkVersion 14
         }
    }
}

注意android.productFlavors.*对象ProductFlavorandroid.defaultConfig是相同的类型。这就意味着他们有相同的属性。

defaultConfig为所有的flavors提供了一些基本的配置,每个flavor都已重写他们。在上面的例子中,这些配置有:

  • flavor1
    • applicationId: com.example.flavor1
    • minSdkVersion: 8
    • versionCode: 20
  • flavor2
    • applicationId: com.example.flavor2
    • minSdkVersion: 14
    • versionCode: 10

通常,Build Type配置会覆盖其他的配置。例如,Build TypeapplicationIdSuffix会添加到Product FlavorapplicationId上。

最后,就像Build Types一样,Product Flavors也可以有他们自己的依赖关系。例如,如果有一个单独的flavors会使用一些广告或者支付,那这个flavors生成的apk就会使用广告的依赖,而其他的flavors就不需要使用。

代码语言:txt
AI代码解释
复制
dependencies {
    flavor1Compile "..."
}

BuildConfig

在编译阶段,Android Studio会生成一个叫做BuildConfig的类,该类包含了编译时使用的一些变量的值。你可以观看这些值来改变不同变量的行为:

代码语言:txt
AI代码解释
复制
private void javaCode() {
    if (BuildConfig.FLAVOR.equals("paidapp")) {
        doIt();
    else {
        showOnlyInPaidAppDialog();
    }
}

下面是BuildConfig中包含的一些值:

  • boolean DEBUG - if the build is debuggable
  • int VERSION_CODE
  • String VERSION_NAME
  • String APPLICATION_ID
  • String BUILD_TYPE- Build Type的名字,例如release
  • String FLAVOR - flavor的名字,例如flavor1

ProGuard配置

Android插件默认会使用ProGuard插件,并且如果Build Type中使用ProGuardminifyEnabled属性开启的话,会默认创建对应的task

代码语言:txt
AI代码解释
复制
android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }

    productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'some-other-rules.txt'
        }
    }
}

Tasks控制

基本的Java项目有一系列的tasks一起制作输出文件。

classes task就是编译Java源码的任务。 我们可以在build.gradle中通过使用classes很简单的获取到它。就是project.tasks.classes.

Android项目中,更多的编译task,因为他们的名字通过Build TypesProduct Flavors生成。

为了解决这个问题,android对象有两种属性:

  • applicationVariants - only for the app plugin android.applicationVariants.all { variant -> .... }
  • libraryVariants - only for the library plugin
  • testVariants - for both pluginsundefined这些都会返回一个ApplicationVariant, LibraryVariant,TestVariantDomainObjectCollection接口的实现类对象。undefinedDomainObjectCollection提供了直接获取或者很方便的间接获取所有对象的方法。

设置编译语言版本

可以使用compileOptions代码块来设置编译时使用的语言版本。默认是基于compileSdkVersion的值。

代码语言:txt
AI代码解释
复制
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }
}

Resource Shrinking

Gradle构建系统支持资源清理:对构建的应用会自动移除无用的资源。不仅会移除项目中未使用的资源,而且还会移除项目所以来的类库中的资源。注意,资源清理只能在与代码清理结合使用(例如ProGuad)。这就是为什么它能移除所依赖类库的无用资源。通常,类库中的所有资源都是使用的,只有类库中无用代码被移除后这些资源才会变成没有代码引用的无用资源。

代码语言:txt
AI代码解释
复制
android {
    ...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NFT数字藏品平台盘点分析来了!
自2021年头以来,我国的数字保藏渠道已逐步发布。此时,Opensea等海外渠道恰逢高速增加期,以CryptoPunk和Bored Ape游艇俱乐部为代表的NFT盛行加密圈。  2021年6月底,支付宝蚂蚁链粉丝上线敦煌数字典藏,敞开了我国数字典藏的出售商场。在这股行情的趋势下,我国各大企业相继布局数字保藏,数字保藏出售渠道也相继发布。  从2021年11月到2022年3月,卖渠道总数大幅增加,从26家增加到一百多家,增加势头依然强劲。百度首先发布了百度超级链钱,阿里也在支付宝上发布了蚂蚁链粉条(后改为鲸探),腾讯依次正式发布了魔芯和TME数集(在QQ音乐)。
vx-longbatuiguang1
2022/06/07
8450
NFT数字藏品平台盘点分析来了!
NFT元宇宙发展能做什么?
NFT,元宇宙,Web 3.0...这些概念最近在互联网上引起了人们的留意。可是,可能仍是有很多人不知道这些概念的详细中心和延伸运用。比方,在未来虚拟经济的开展中,NFT(非同质令牌)能够用来做什么? 在虚拟世界中,NFT能够在树立可行的经济中发挥关键作用: 或许游戏在虚拟实践中的操作; 虚拟空间的房地产、数码产品生意等出资时机; 立异电子商务服务等等; 以及其他与未来元宇宙商场动态相关的可能性。
v-longbatuiguang2
2022/06/25
3710
NFT元宇宙发展能做什么?
NFT数字藏品系统 数字藏品系统开发详解案例 数字藏品现成源码成品说明开发
物以稀为贵。当数字藏品具有了唯一性、可证明的稀缺性、不可分割性等三个属性之后,本身就具备了价值。而这价值,首先体现在数字藏品背后承载的现实实物或虚拟物品本身就具有收藏价值;其次,是源自于数字藏品共识价值的形成,如时间价值、艺术价值、版权价值、稀缺价值等。
DD_MrsFu123
2022/06/26
5890
NFT数字艺术藏品介绍
其间,数字艺术藏品(digital art collection)作为NFT的一种使用方式,选用block lian技能,对应于特定作品或艺术品生成的唯一数字凭据,在保护其数字版权的基础上,完成真实可信的数字发行、购买、藏品和使用。随着nft概念的火热,越来越多的NFT相关使用诞生。其间,最受重视的是NFT数字艺术品买卖渠道。需了解交流可联系作者
v-longbatuiguang2
2022/06/07
6310
NFT数字艺术藏品介绍
NFT数字藏品系统 | 数字藏品系统开发详解案例 | 数字藏品现成源码
物以稀为贵。当数字藏品具有了唯一性、可证明的稀缺性、不可分割性等三个属性之后,本身就具备了价值。而这价值,首先体现在数字藏品背后承载的现实实物或虚拟物品本身就具有收藏价值;其次,是源自于数字藏品共识价值的形成,如时间价值、艺术价值、版权价值、稀缺价值等。
vx-ccy981112
2022/06/27
4490
NFT数字藏品系统 | 数字藏品系统开发详解案例 | 数字藏品现成源码
NFT数字艺术藏品的发展与方案
目前,NFT的项目首要会集在数字艺术藏品、游戏财物和虚拟世界。 其间,数字艺术藏品(digital art collection)作为NFT的一种使用方式,选用block lian技能,对应于特定作品或艺术品生成的唯一数字凭据,在保护其数字版权的基础上,完成真实可信的数字发行、购买、藏品和使用。随着nft概念的火热,越来越多的NFT相关使用诞生。其间,最受重视的是NFT数字艺术品买卖渠道。欢迎探讨交流
v-longbatuiguang2
2022/06/23
7350
NFT数字艺术藏品的发展与方案
NFT盲盒开发机制
现在,NFT是整个加密范畴最抢手的范畴之一。蓝狐笔记还谈到了几天前火热的NFT狂怒。  依据下面的搜索数据,NFT开展很快,甚至比DeFi还快。  虽然NFT自身的价值很难说清楚,但它比DeFi的复杂度越低,就越简单走向普通用户。
vx-longbatuiguang1
2022/06/08
4500
NFT盲盒开发机制
什么是生成艺术NFT,Art Blocks为什么能持续霸榜
9月2日 Opensae 最近交易数据显示,Art Blocks 截至目前的总交易额已突破 233849 Eth 约 8.6 亿美元 ,创下历史新高,交易者数量突破2万。8月27日,Art Blocks 铸造的艺术品 Ringer #879以 568.5 万美元(1.8K ETH)价格成交,是历史上交易额第三高的 NFT 收藏品。
xiangzhihong
2021/12/30
9720
什么是生成艺术NFT,Art Blocks为什么能持续霸榜
NFT元宇宙,以及游戏的关系 金色财经
上个世纪九十年代被提出的元宇宙概念,突然在30年后的今天以另外一种形式“复活”,并且在NFT市场迎来了属于自己的高光时刻。元宇宙概念的渐热标志着NFT从最早的数字收藏拍卖场景向更加复杂和庞大的体系发展,在这个过程中游戏成为了元宇宙+NFT设计的重要载体,这三者各自的角色定位以及配合关系很容易混淆,本文将对三者的关系和协同配合做一个简单的梳理。
vx_Dapp9521
2021/11/03
9800
NFT元宇宙,以及游戏的关系 金色财经
腾讯、阿里分别发布元宇宙-NFT产品
问题导读 1.什么是NFT? 2.腾讯、阿里分别发布了什么元宇宙产品? 3.什么是友盟链,公链? 国内元宇宙,大厂都在默默的发布元宇宙产品。 我们可能知道百度的“希壤”,然而腾讯和阿里,悄悄的上线了自己的元宇宙NFT产品。 这里可能大家对NFT比较陌生。我们这里诠释下: NFT:全称为Non-Fungible Token,指非同质化代币,是用于表示数字资产(包括jpg和视频剪辑形式)的唯一加密货币令牌,可以买卖。NFT对应的应用,有”元视觉“,还有“鲸探”和“幻核”。说的更直白一些,NFT最大的应用是数字收藏品,至于数字收藏品是什么下面也会有详细的解释。比如NFT头像可以在微信或者元宇宙,或者任何地方,都可以使用。但是这个头像专属于你。 鲸探、幻核发布后,数字收藏品一扫而空,不过希望大家要理智、根据的情况不要跟风。数字收藏品, 下面是对“鲸探”“幻核”的介绍。 阿里发布了“鲸探”,腾讯发布了“幻核” 鲸探介绍
用户1410343
2022/01/26
1K0
腾讯、阿里分别发布元宇宙-NFT产品
国内数字藏品平台激增,海外NFT缩水万倍!都在发行什么?
2022年,在“5·18国际博物馆日”,各地文博单位纷纷发布以文物为主题的数字藏品。随后,在“5·19中国旅游日”,各地景区也发布了以古建筑为主题的数字藏品。到了5月20日,以爱情为主题发行的“520”数字藏品更是覆盖各行业领域。
科技旋涡
2022/08/30
6010
国内数字藏品平台激增,海外NFT缩水万倍!都在发行什么?
数字藏品系统开发怎么制作?NFT数字藏品系统开发说明功能
什么是所谓的数字藏品,其实就是指使用区块链技术,将一些作品、艺术品生成相对应的数字凭证,不仅可以保护版权,还能实现数字化发行、购买、收藏和使用,具有可追溯、难以篡改、唯一性等特点。
DD_MrsFu123
2022/06/26
8470
数字藏品(NFT)项目的上线流程
数字藏品(NFT)项目的上线流程是一个涉及多个环节的复杂过程,需要精心策划和执行。以下是一个详细的步骤指南,涵盖了从准备阶段到上线后的维护。
数字孪生开发者
2025/03/28
1280
数字藏品(NFT)项目的上线流程
NFT考古行动:一文盘点史前NFT 项目
如果说 2020 年的夏天属于 DeFi,那么今年夏天,NFT 一定是当仁不让的主角。从腾讯、阿里等传统互联网巨头入局,再到路易威登、巴宝莉、保时捷等顶级品牌进行了联动,NFT 正在实现加密行业的又一次「破圈」。从虚拟土地的热炒,到 GameFi 游戏的爆红,再到头像 NFT 的风靡,NFT 的市场规模以惊人的速度扩张,且丝毫没有平息的迹象。
用户7358413
2021/09/02
1.2K0
为什么说NFT技术是元宇宙发展的基础?
纽约时报专栏作家Ezra Klein曾提出这样一个观点:目前的互联网尤其缺少的是验证“身份”、“所有权”和“真实性” 。
小将
2022/03/26
5200
为什么说NFT技术是元宇宙发展的基础?
数字藏品NFT的开发框架
数字藏品NFT(非同质化代币)的开发框架涉及区块链技术、智能合约、存储解决方案、用户交互等多个方面。以下是一个完整的数字藏品NFT开发框架,涵盖从技术选型到部署上线的关键步骤。
数字孪生开发者
2025/01/26
2380
数字藏品NFT的开发框架
NFT链游开发:NFT与元宇宙的联系
NFT全称(不行替代令牌),中文名非同质通行证,也译为不行替代通行证。这是一种独特的数字财物。  比特币等财物是能够交换的,也便是说所有的比特币都是一样的,能够交换。  可是,每个非齐次经过是不同的。非同质通行证的比如能够是艺术品或游戏,NFT的每个实例都是绝无仅有的。
LIULIANG
2022/06/10
4110
NFT链游开发:NFT与元宇宙的联系
艺术品NFT的开发框架
艺术品NFT的开发框架通常指的是构建整个NFT系统所需的技术栈和工具集合。它包括了从最底层的数据存储到用户交互界面的各个层面。以下是一个典型的艺术品NFT开发框架的组成部分。
数字孪生开发者
2025/06/03
830
艺术品NFT的开发框架
数字藏品与数字艺术品的区别
数字藏品可以理解为中国特色,是使用区块链技术进行唯一标识的经数字化的特定作品、艺术品和商品,比如数字画作、图片、音乐、视频、3D模型等。每个数字藏品都映射着特定区块链上的唯一序列,不可篡改、不可分割,也不能互相替代。
v-longbatuiguang2
2022/06/01
1.8K0
数字藏品与数字艺术品的区别
NFT数字藏品系统开发的显著特点
NFT,这种非同质的标志,其特征是其共同和共同的标志,其不行分割性,以及其无法相等交换。是根据区块链的记账技能,用于开展数字经济和价值网络。
vx-longbatuiguang1
2022/05/21
4070
NFT数字藏品系统开发的显著特点
推荐阅读
相关推荐
NFT数字藏品平台盘点分析来了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档