AndroidStudio3.0剛剛發(fā)布兩天(版本控的我~),便迫不及待的升級(jí)了,升級(jí)前也明白這次的版本跨度較大,老項(xiàng)目可能存在很多的問(wèn)題,沒(méi)成想還是從中午折騰到了晚上十點(diǎn).不過(guò)結(jié)果還不錯(cuò),成功的跑起來(lái)了項(xiàng)目. 列出踩過(guò)的坑,希望后面要升級(jí)的小伙伴遇到類似的問(wèn)題可以做個(gè)參考;
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比鹿寨網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式鹿寨網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鹿寨地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
1.升級(jí)安裝
升級(jí)方法:
1. 直接用自帶的更新工具
操作步驟: >菜單欄>Help>Check for Updates..(前提網(wǎng)絡(luò)要絕對(duì)的暢通,你懂的)
2. 手動(dòng)的下載新的版本
下載地址https://developer.android.google.cn/studio/archive.html#android-studio-3-0?utm_source=androiddevtools.cn&utm_medium=website (國(guó)內(nèi)可以訪問(wèn))
升級(jí)完成后,打開(kāi)原有項(xiàng)目,在經(jīng)過(guò)一段時(shí)間到indexing后
如果你的項(xiàng)目可以運(yùn)行,OK,恭喜你,接下來(lái)的內(nèi)容,你可以選擇忽略,因?yàn)槟愕捻?xiàng)目很nice,啥問(wèn)題沒(méi)有(我不相信你啥問(wèn)題都沒(méi)有~畢竟我踩了這么多的坑);
如果項(xiàng)目存在配置的問(wèn)題,那么便可能產(chǎn)生如下問(wèn)題:
2.問(wèn)題
1.配置了騰訊的資源文件壓縮插件導(dǎo)致的異常
我的項(xiàng)目在indexing后出現(xiàn)的第一個(gè)問(wèn)題
Could not GET 'http://oss.jfrog.org/artifactory/oss-snapshot-local/com/tencent/mm/AndResGuard-gradle-plugin/1.2.1/AndResGuard-gradle-plugin-1.2.1.pom'. Received status code 409 from server: Conflict Enable Gradle 'offline mode' and sync project
看到這個(gè)異常我的第一反應(yīng)就是項(xiàng)目中配置了騰訊的資源文件壓縮插件,果斷移除;
移除步驟:
1. 在項(xiàng)目級(jí)別的build.gradle也就是最外層的build.gradle文件中的dependencies節(jié)點(diǎn)中,移除
//資源文件混淆壓縮classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.1'
2. 在應(yīng)用級(jí)別的build.gradle的頂部移除
apply plugin: 'AndResGuard'//資源文件混淆壓縮
3. 第二條中提到build.gradle文件中相關(guān)的資源壓縮配置需要一并的移除;
andResGuard { //mappingFile = file("./resource_mapping.txt") mappingFile = null // 當(dāng)你使用v2簽名的時(shí)候,7zip壓縮是無(wú)法生效的。 use7zip = true useSign = true // 打開(kāi)這個(gè)開(kāi)關(guān),會(huì)keep住所有資源的原始路徑,只混淆資源的名字 keepRoot = true whiteList = [ // for your icon "R.drawable.icon", // for fabric "R.string.com.crashlytics.*", // for umeng update "R.string.umeng*", "R.string.UM*", "R.string.tb_*", "R.layout.umeng*", "R.layout.tb_*", //=========↓↓美洽↓↓========= "R.layout.mq_*", "R.drawable.mq_*", "R.style.mq_*", "R.string.mq_*", "R.color.mq_*", //=========↑↑美洽↑↑========= //=========↓↓ping++↓↓========= "R.layout.*pingpp*", "R.drawable.pingpp*", "R.drawable.tips_bg.9.png", "R.style.*pingpp*", "R.string.*pingpp*", "R.id.pingpp*", "R.color.*pingpp*", //=========↑↑ping++↑↑========= "R.drawable.umeng*", "R.drawable.tb_*", "R.anim.umeng*", "R.color.umeng*", "R.color.tb_*", "R.style.*UM*", "R.style.umeng*", "R.id.umeng*", // umeng share for sina "R.drawable.sina*", // for google-services.json "R.string.google_app_id", "R.string.gcm_defaultSenderId", "R.string.default_web_client_id", "R.string.ga_trackingId", "R.string.firebase_database_url", "R.string.google_api_key", "R.string.google_crash_reporting_api_key", // umeng share for facebook "R.layout.*facebook*", "R.id.*facebook*", // umeng share for messager "R.layout.*messager*", "R.id.*messager*", // umeng share commond "R.id.progress_bar_parent", "R.id.webView" ] compressFilePattern = [ "*.png", "*.jpg", "*.jpeg", "*.gif", "resources.arsc" ] sevenzip { artifact = 'com.tencent.mm:SevenZip:1.2.1' //path = "/usr/local/bin/7za" } }
上述操作完后,同步代碼,該問(wèn)題KO;
2.一直卡在Refreshing項(xiàng)目
第一條中的問(wèn)題解決后,我出現(xiàn)了
這種提示,在正常的流程中,如果不出現(xiàn)第一個(gè)問(wèn)題,會(huì)首先出現(xiàn)這個(gè)提示,意思是升級(jí)現(xiàn)在項(xiàng)目的編譯插件,相信之前升級(jí)過(guò)AS版本的同學(xué)在第一次運(yùn)行新版本的時(shí)候見(jiàn)過(guò)這個(gè)提示,直接點(diǎn)擊update按鈕就行了.如果不想接著踩坑那么點(diǎn)擊Dont't reminmd me againg for this project按鈕就可以了,它代表你還是用之前版本的插件來(lái)運(yùn)行當(dāng)前項(xiàng)目,也就不會(huì)出現(xiàn)后面一大串的問(wèn)題;
這里直接點(diǎn)擊update按鈕;
點(diǎn)擊之后如果你網(wǎng)絡(luò)不暢通的話就會(huì)一直的
之所以會(huì)這樣,是因?yàn)?br />點(diǎn)擊該按鈕后實(shí)際上做了兩件事情
在主項(xiàng)目的build.gradle文件中的dependencies節(jié)點(diǎn)中更改了
//原先的插件版本 classpath 'com.android.tools.build:gradle:2.3.3' //更改后的插件版本 classpath 'com.android.tools.build:gradle:3.0.0'
在項(xiàng)目目錄中的gradle > gradle-wrapper.properties文件中的distributionUrl字段更改了
//原先的插件版本 distributionUrl=https://services.gradle.org/distributions/gradle-3.3-all.zip //更改后的插件版本 distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip
這兩個(gè)文件修改后AS就會(huì)去下載https://services.gradle.org/distributions/gradle-4.1-all.zip這個(gè)文件,不用點(diǎn)什么奇技淫巧,就等AS下載完吧(基本完不了)
這里給出兩種解決方案:
兩種解決方案的前提條件是先把該文件下載下來(lái),AS下載的奇慢,那么把https://services.gradle.org/distributions/gradle-4.1-all.zip扔到迅雷中,分分鐘下載完成(迅雷功能不止于此~);
把文件放到本地的Tomcat服務(wù)器,或者IIS服務(wù)器中,或者免費(fèi)的七牛云服務(wù)中,獲取這個(gè)文件的下載地址,修改 gradle-wrapper.properties文件中distributionUrl的值為你的下載地址,關(guān)閉AS,重新打開(kāi)(親測(cè)可行);
找到.gradle文件夾路徑:windows一般在 C:\Users\<當(dāng)前登錄用戶名>.gradle,
mac是在:用戶/(當(dāng)前用戶目錄)/.gradle,解壓下載好的文件到該目錄中,關(guān)閉AS,重新打開(kāi)(未親測(cè));
3.修改輸出apk的文件名導(dǎo)致的異常
第二條問(wèn)題解決后,出現(xiàn)了
Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=tiger8shopDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl. Open File
點(diǎn)擊Open File定位到應(yīng)用級(jí)別的build.gradle文件中的這個(gè)位置
static def releaseTime() { return new Date().format("yyyy-MM-dd-HH-mm", TimeZone.getDefault())//包含時(shí)分秒 } static def debugTime() { // return new Date().format("yyyy-MM-dd", TimeZone.getDefault()) return new Date().format("yyyy", TimeZone.getDefault()) } //=============================上面的代碼定義在android節(jié)點(diǎn)外,AS3.0版本如果需要輸出apk文件名帶上時(shí)間,上面代碼你可以參考下=================================== //文件輸出名增加版本號(hào)和時(shí)間 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName if (outputFile.name.contains("debug")) {//debug版本,使用自己的文件名,方便記憶 fileName = "$applicationId _v${defaultConfig.versionName}_${debugTime()}_code${defaultConfig.versionCode}_debug.apk" output.outputFile = new File(outputFile.parent, fileName)//Open File后定位到這個(gè)位置,這個(gè)配置,識(shí)別不出outputFile是啥了 } else { fileName = "$applicationId _v${defaultConfig.versionName}_code${defaultConfig.versionCode}_${releaseTime()}_${variant.productFlavors[0].name}_release.apk" output.outputFile = new File(outputFile.parent, fileName) } } } }
這個(gè)是自己之前配置的可以控制AS輸出的apk文件的名稱,新版本不能這樣配置了,看官方的引導(dǎo)可以改成
//AS3.0版本 android.applicationVariants.all { variant -> variant.outputs.all { if (variant.name.endsWith("Debug")) { //debug包 outputFileName = "$applicationId _v${defaultConfig.versionName}_${debugTime()}_code${defaultConfig.versionCode}_debug.apk" } else { //release包 outputFileName = "$applicationId _v${defaultConfig.versionName}_code${defaultConfig.versionCode}_${releaseTime()}_release.apk" } } }
效果和之前差不多,直接更改,問(wèn)題KO
4.之前項(xiàng)目中配置了第三方APT插件導(dǎo)致的異常
如上圖這個(gè)異常是我折騰最長(zhǎng)時(shí)間的問(wèn)題,各種百度,Google最終得知和新版本AS3.0中自帶了APT處理插件有關(guān),因?yàn)樽约褐芭渲玫牡谌降腁PT插件,所有它們沖突了~,那么移除則異常KO;
移除步驟
1. 在項(xiàng)目級(jí)別的build.gradle也就是最外層的build.gradle文件中的dependencies節(jié)點(diǎn)中,移除
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
2. 在應(yīng)用級(jí)別的build.gradle的頂部移除
apply plugin: 'android-apt'
3. 在應(yīng)用級(jí)別的build.gradle的dependencies節(jié)點(diǎn)中,替換所有用apt開(kāi)頭的引依賴為annotationProcessor例如
//替換之前 apt "com.jakewharton:butterknife-compiler:$rootProject.ext.globalButterKnifeAptVersion" //替換之后 annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.ext.globalButterKnifeAptVersion"
上面三步操作完成后,同步項(xiàng)目,問(wèn)題解決
5.BuildTool最低版本異常
這個(gè)異常出現(xiàn)就顯而易見(jiàn)了,AS3.0最低支持的BuildTools插件是26.0.2版本,別問(wèn)我BuildTools是啥,我也不知道(顧名思義,AS的編譯工具);BuildTools的版本改到26.0.2版本,同步代碼就好了,如果你的SDK中沒(méi)有下載BuildTools26.0.2版本,AS會(huì)自動(dòng)的提示你去下載,下載完同步代碼,即可;
6.BuildTool庫(kù)項(xiàng)目版本不統(tǒng)一問(wèn)題
AS3.0對(duì)于庫(kù)項(xiàng)目的build.gradle的配置也進(jìn)行了干預(yù),官方說(shuō)可以加快編譯速度,想想也是,庫(kù)項(xiàng)目都用不同版本的BuildTool,編譯起來(lái)肯定慢;所以這里點(diǎn)擊Open File之后,定位到的build.gradle文件,修改里面的buildToolsVersion節(jié)點(diǎn)為26.0.2即可
如果項(xiàng)目中的庫(kù)項(xiàng)目較多,建議將buildToolsVersion版本配置到gradle.properties文件中,然后項(xiàng)目中的庫(kù)項(xiàng)目都引用該配置,改一處,則整個(gè)項(xiàng)目的buildToolsVersion配置都改了,別問(wèn)我咋配置的,因?yàn)檫@會(huì)跑題,自行百度
7.multidex版本異常
這個(gè)問(wèn)題說(shuō)的是AS3.0解析multidex1.0.2版本失敗,為什么失敗?
因?yàn)楝F(xiàn)在google自家的依賴,全部都收回到了自家的cdn服務(wù)器了,之前在項(xiàng)目級(jí)的build.gradle文件中的repositories節(jié)點(diǎn)中配置jenter(),就可以獲取大部分的依賴(雖然慢了點(diǎn)),但是現(xiàn)在Google官方需要我們?cè)趓epositories節(jié)點(diǎn)中配置上google(),作用就是獲取自家的依賴,而原先的jcenter()不需要?jiǎng)?而multidex是Google的依賴所以只用之前的jcenter(),肯定是解析不到它了.
配置例如
repositories { google()//新增的 jcenter()}
項(xiàng)目級(jí)的build.gradle文件中的有兩個(gè)repositories節(jié)點(diǎn),都配置上google()
同步項(xiàng)目,問(wèn)題KO
8.Lambda插件沖突
Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle: apply plugin: 'me.tatarka.retrolambda' To learn more, go to https://d.android.com/r/tools/java-8-support-message.html
這個(gè)不用多說(shuō)相信大家在準(zhǔn)備升級(jí)AS3.0都知道,它的一大特性是支持了JAVA8,而項(xiàng)目之前為了能用Lambda,而用了第三方的插件,這里移除即可;
移除步驟
1. 在項(xiàng)目級(jí)別的build.gradle也就是最外層的build.gradle文件中的dependencies節(jié)點(diǎn)中,移除
classpath 'me.tatarka:gradle-retrolambda:3.2.0'//lambda表達(dá)式
2. 在應(yīng)用級(jí)別的build.gradle的頂部移除
apply plugin: 'me.tatarka.retrolambda'//lambda表達(dá)式
上面兩步操作完成后,同步項(xiàng)目,問(wèn)題解決
9.flavor配置異常
Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
這個(gè)可以參考官方給出的文檔地址(網(wǎng)絡(luò)要絕對(duì)的通暢~)
問(wèn)題出現(xiàn)在之前的flavor配置不能用了,別問(wèn)我flavor是啥,你自己配置的你不知道~(主要作用,多渠道打包
//之前的配置 productFlavors { _360 {} baidu {} xiaomi {} meizu {} tencent {} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [CLICK_CHANNEL_VALUE: name] } // ==============================分割線=================================== //改成如下配置,問(wèn)題解決 flavorDimensions "tier"http://新增的,值是數(shù)組 productFlavors { _360 { dimension "tier"} baidu { dimension "tier"} xiaomi { dimension "tier"} meizu { dimension "tier"} tencent { dimension "tier"} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [CLICK_CHANNEL_VALUE: name] }
想知道為什么這樣配置,可以看看官方文檔
至此上述配置更改后,我的項(xiàng)目同步代碼不報(bào)錯(cuò)了~,但是坑遠(yuǎn)遠(yuǎn)沒(méi)有填完,繼續(xù)
10.AAPT2編譯異常
這一大串的異常在編譯的時(shí)候報(bào)出,我在第一次導(dǎo)入項(xiàng)目的時(shí)候遇到了,第二次導(dǎo)入其它項(xiàng)目的時(shí)候,竟然沒(méi)有遇到,對(duì)比之下得出問(wèn)題是出在配置了高版本的support包的問(wèn)題,當(dāng)你把項(xiàng)目所有support包的版本配置到25.2.0的時(shí)候什么問(wèn)題都沒(méi)有,但是配置成26.0.0或者27.0.0版本的時(shí)候就會(huì)出現(xiàn)這個(gè)問(wèn)題(親測(cè));
解決方案
1. 使用低版本的support包,把項(xiàng)目所有support包的版本配置到25.2.0或者其它較低的版本
2. 配置gradle.properties中關(guān)閉AAPT2編譯,說(shuō)人話就是在其中增加android.enableAapt2=false配置,再次編譯問(wèn)題解決(推薦),例如
android.enableAapt2=false
同步代碼,問(wèn)題KO;
11.方法找不到異常/或者有點(diǎn)莫名其妙的異常
這兩個(gè)異常產(chǎn)生的的原因是因?yàn)榈诰艞l如果你升級(jí)了support包的版本的時(shí)候compileSdkVersion的版本沒(méi)有更改,親測(cè)如果你的support包更改到了26.0.0或以上的話,需要更改項(xiàng)目中所有的compileSdkVersion為26或以上
compileSdkVersion = 26
更改好,同步代碼,問(wèn)題解決
到這我的項(xiàng)目可以運(yùn)行,可以調(diào)試了,以為終于KO了所有問(wèn)題了,但是但是編譯輸入release包的時(shí)候內(nèi)存溢出了,WTF
12.生成release包異常
看到這個(gè)異常我是一臉的蒙蔽,各種百度,google都沒(méi)有說(shuō)這個(gè)問(wèn)題,咋滴,不讓用啦,手動(dòng)打包啊~,但是到夜里的時(shí)候忽然靈光一現(xiàn),WTF,會(huì)不會(huì)是又是啥第三方依賴的問(wèn)題,畢竟很多問(wèn)題都是因?yàn)榈谌降囊蕾?于是乎,連忙的注釋了,一大堆的項(xiàng)目級(jí)別的build.gradle文件中的一些依賴,經(jīng)過(guò)測(cè)試,定位到了美團(tuán)的熱更新,然后移除了,相關(guān)的配置,然后一些正常~~
移除步驟
1. 在項(xiàng)目級(jí)別的build.gradle也就是最外層的build.gradle文件中的dependencies節(jié)點(diǎn)中,移除
2. 在應(yīng)用級(jí)別的build.gradle的頂部移除
apply plugin: 'robust'//美團(tuán)熱更新框架
3. 在應(yīng)用級(jí)別的build.gradle的dependencies節(jié)點(diǎn)中的
//美團(tuán)熱更新框架 compile "com.meituan.robust:robust:${ROBUST_VERSION}"
依賴可以不移除(不移除也是可以正常生成apk文件的,只是熱更新無(wú)法使用),這個(gè)依賴如果移除了,那么你代碼中相關(guān)的熱更新代碼也需要移除,否則就是找不到相關(guān)的類了;
** 最后的最后,AS3.0算是徹底的用上了,編譯速度相比之前有沒(méi)有增快,新特性好不好用,有待后續(xù)的使用了.
希望大家在升級(jí)AS3.0的時(shí)候如果遇到和我相同的問(wèn)題,可以做一個(gè)參考 **
下面我們?cè)趤?lái)看一篇經(jīng)常遇到的坑的經(jīng)典問(wèn)題:
最近 Android Studio 3.0 版本正式推出,趁著項(xiàng)目剛發(fā)完版本,趕緊更新試試水,結(jié)果發(fā)現(xiàn)項(xiàng)目完全跑不起來(lái),折騰了幾個(gè)小時(shí)才搞好。記錄一下填坑過(guò)程,希望能幫助其他同學(xué)。
1. gradle 和 buildToolsVersion 版本
Android Studio 3.0 要求 gradle 版本為 4.1 ,對(duì)應(yīng)的 buildToolsVersion 為 26.0.2 ,然后記得在項(xiàng)目最外層的 build.gradle 添加 google() ,如果不添加將會(huì)導(dǎo)致某些官方依賴下載不了。
buildscript { repositories { ... google() } }
2. module 依賴方式變更
原先依賴 module 使用的是 compile ,現(xiàn)在需要替換為 api 或 implementation。
api : module 編譯時(shí)可用,module 的使用者編譯和運(yùn)行時(shí)可用,這個(gè)和過(guò)時(shí)的 compile 一樣的。
implementation : module 編譯時(shí)可用,module 的使用者運(yùn)行時(shí)可用,對(duì)于大量使用 library 的項(xiàng)目,可以顯著提高編譯時(shí)間,因?yàn)樗梢詼p少構(gòu)建系統(tǒng)重新編譯一些 module 。
那么什么時(shí)候用 api ,什么時(shí)候用 implementation 呢?由于公司項(xiàng)目采用的是組件化開(kāi)發(fā),有個(gè) common module 需要被各個(gè)組件依賴,一開(kāi)始采用的是 implementation ,結(jié)果發(fā)現(xiàn)會(huì)導(dǎo)致別的組件無(wú)法引用 common 中的庫(kù)( common -> A module ,A module 無(wú)法引用 common 依賴的庫(kù) )。
試驗(yàn)過(guò)后得出結(jié)論,當(dāng)這個(gè) module 會(huì)被多次引用應(yīng)該使用 api,不會(huì)被別的 module 引用使用 implementation 。
發(fā)一下我現(xiàn)在使用的方式
dependencies { api fileTree(include: ['*.jar'], dir: 'libs') api 'com.squareup.okhttp3:okhttp:3.4.2' ... debugApi 'com.squareup.leakcanary:leakcanary-android:1.5.1' releaseApi 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' }
compileOnly 替換了 provided,runtimeOnly 替換了 apk。
3. apt 插件更換
apt 插件已被廢棄,需更換為 annotationProcessor 。
//apply plugin: 'android-apt' dependencies { ... annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' }
4.第三方庫(kù)不兼容問(wèn)題
· retrolambda
Android Studio 3.0 已經(jīng)支持 Java 8 了,不需要第三方庫(kù)來(lái)支持,因此需要去掉 retrolambda 庫(kù)。
項(xiàng)目最外層的 build.gradle
buildscript { ... dependencies { ... //classpath 'me.tatarka:gradle-retrolambda:3.2.5' } }
module 中的 build.gradle
2. 在應(yīng)用級(jí)別的build.gradle的頂部移除
apply plugin: 'robust'//美團(tuán)熱更新框架
3. 在應(yīng)用級(jí)別的build.gradle的dependencies節(jié)點(diǎn)中的
//美團(tuán)熱更新框架 compile "com.meituan.robust:robust:${ROBUST_VERSION}"
依賴可以不移除(不移除也是可以正常生成apk文件的,只是熱更新無(wú)法使用),這個(gè)依賴如果移除了,那么你代碼中相關(guān)的熱更新代碼也需要移除,否則就是找不到相關(guān)的類了;
網(wǎng)站標(biāo)題:老項(xiàng)目遷移AndroidStudio3.0遇到的坑
分享路徑:http://aaarwkj.com/article36/gipjpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、面包屑導(dǎo)航、網(wǎng)站改版、建站公司、云服務(wù)器、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)