您的位置:首页 > 移动开发 > Android开发

AndroidStudio NDK环境配置详解

2016-10-18 10:01 253 查看
</pre> <span style="white-space:pre"> </span>本文讲的是androidstudio环境下NDK的开发环境的配置,还在用eclipse的童鞋可以路过(别怪我<img alt="偷笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/titter.gif" />),现在用eclipse的童鞋应该很少了吧,毕竟现在Androidstudio的功能这么强大,elcipse上有的功能AS上都有,AS上有的eclipse未必有,还是建议童鞋们用AS<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" />。不同于eclipse上的NDK环境的配置AS不需要装<span style="color:rgb(51,51,51); font-family:'Microsoft YaHei'; font-size:16px; line-height:28.8px">Cygwin工具那么麻烦,从Androidstudio1.3开始androidstudio的NDK开发环境搭建相对简单,好了不费话了(作为一个男人不应该那么啰嗦<img alt="尴尬" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/awkward.gif" />)开始咱们Androidstudio的NDK开发环境的搭建之旅吧。</span></p><p><span style="white-space:pre"></span>首先准备好Androidstudio(>=1.3),NDK(ndk-r10-e)<span style="color:rgb(51,51,51); font-family:'Microsoft YaHei'; font-size:16px; line-height:28.8px">。打开Androidstudio新建一个工程然后关联上NDK环境。</span></p><p><span style="color:rgb(51,51,51); font-family:'Microsoft YaHei'; font-size:16px; line-height:28.8px"><img src="https://img-blog.csdn.net/20161018110010463?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></p><p><span style="color:rgb(51,51,51); font-family:'Microsoft YaHei'; font-size:16px; line-height:28.8px"><img src="https://img-blog.csdn.net/20161018110143934?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" /></span></p><p><span style="color:rgb(51,51,51); font-family:'Microsoft YaHei'; font-size:16px; line-height:28.8px"><span style="white-space:pre"> </span>在设置好NDK之后,进行gradle的配置,gradle需要设置三个地方,设置完之后就可以进行NDK应用实例开发了,不需要像以前那样编写MakeFile文件,相当方便,当然配置gradle的时候还是要相当的小心,由于当前NDK环境还在Experienmental阶段,更新不断容易出错。下面介绍设置gradle的三个过程:</span></p><p><span style="color:rgb(51,51,51); font-family:'Microsoft YaHei'; font-size:16px; line-height:28.8px">一:首先编辑项目的根目录下的build.gradle文件,<span style="margin: 0px; padding: 0px; line-height: 1.8; color: rgb(51, 51, 51); font-family: 'Microsoft YaHei'; font-size: 16px;">在dependencies中设置:</span><span style="margin: 0px; padding: 0px; line-height: 1.8; color: rgb(51, 51, 51); font-family: 'Microsoft YaHei'; font-size: 16px;"><span style="margin: 0px; padding: 0px; line-height: 1.8; color: rgb(153, 51, 102);">classpath 'com.android.tools.build:gradle-experimental:0.2.0'</span> ,注意这里需要把之前的classpath注释掉。还需要注意的是,这里设置的<span style="font-family: 'Microsoft YaHei'; font-size: 16px; line-height: 1.8; margin: 0px; padding: 0px; color: rgb(153, 51, 102);">classpath 'com.android.tools.build:gradle-experimental:0.2.0'</span><span style="color: rgb(51, 51, 51); font-family: 'Microsoft YaHei'; font-size: 16px; line-height: 28.8px;"> 对应的设置根目录下gradle目录下的gradle wraper的gradle-2.5-all版本。</span></span></span></p><p><span style="font-family:Microsoft YaHei;color:#333333;"><span style="font-size: 16px; line-height: 28.8px;">二:设置Module gradle,这里的Module gradle包含app目录下的以及其他依赖的Module工程下的build.gradle文件。由于自动生成的buildgradle文件内容比较多,并且NDK环境下的gradle内容变化比较大,下面将贴出代码并进行详细的说明。</span></span></p><p><span style="font-family: 'Microsoft YaHei';"><span style="line-height: 28.8px;"></span></span><pre name="code" class="plain" style="font-size: 16px;"><span style="color:#333333;">apply plugin: 'com.android.model.application'
model{
android {
compileSdkVersion= 24
buildToolsVersion ="24.0.2"
defaultConfig.with {
applicationId ="您的包名"
minSdkVersion.apiLevel= 15
targetSdkVersion.apiLevel= 24
versionCode= 1
versionName= "1.0"
testInstrumentationRunner ="android.support.test.runner.AndroidJUnitRunner"
}
tasks.withType(JavaCompile) {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

/*
externalNativeBuild {
ndkBuild {
path file("src\\main\\jni\\Android.mk")
}
}
*/

}
android.ndk{
moduleName="2b"//这是so库的名称</span><span style="white-space: pre;"><span style="color:#333333;">
</span></span><div class="line number31 index30 alt2" style="font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; margin: 0px !important; padding: 0px 1em !important; border-radius: 0px !important; border: 0px !important; border-image-source: initial !important; border-image-slice: initial !important; border-image-width: initial !important; border-image-outset: initial !important; border-image-repeat: initial !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important; white-space: nowrap !important; background-image: none !important; background-attachment: initial !important; background-color: rgb(244, 244, 244) !important; background-size: initial !important; background-origin: initial !important; background-clip: initial !important; background-position: initial !important; background-repeat: initial !important;"><code class="csharp plain" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; border-image-source: initial !important; border-image-slice: initial !important; border-image-width: initial !important; border-image-outset: initial !important; border-image-repeat: initial !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; background-image: none !important; background-attachment: initial !important; background-color: initial !important; background-size: initial !important; background-origin: initial !important; background-clip: initial !important; background-position: initial !important; background-repeat: initial !important;"><span style="white-space:pre"> </span>cppFlags += </code><code class="csharp string" style="color: blue !important; margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; border-image-source: initial !important; border-image-slice: initial !important; border-image-width: initial !important; border-image-outset: initial !important; border-image-repeat: initial !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; background-image: none !important; background-attachment: initial !important; background-color: initial !important; background-size: initial !important; background-origin: initial !important; background-clip: initial !important; background-position: initial !important; background-repeat: initial !important;">"-std=c++11"</code></div><div class="line number32 index31 alt1" style="color: rgb(51, 51, 51); font-family: Consolas, 'Bitst
1108b
ream Vera Sans Mono', 'Courier New', Courier, monospace; margin: 0px !important; padding: 0px 1em !important; border-radius: 0px !important; border: 0px !important; border-image-source: initial !important; border-image-slice: initial !important; border-image-width: initial !important; border-image-outset: initial !important; border-image-repeat: initial !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important; white-space: nowrap !important; background-image: none !important; background-attachment: initial !important; background-size: initial !important; background-origin: initial !important; background-clip: initial !important; background-position: initial !important; background-repeat: initial !important;"><code class="csharp spaces" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; background: none !important;">        </code><code class="csharp plain" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: rgb(0, 0, 0) !important; background: none !important;">cppFlags += </code><code class="csharp string" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: blue !important; background: none !important;">"-fexceptions"</code></div><div class="line number33 index32 alt2" style="color: rgb(51, 51, 51); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; margin: 0px !important; padding: 0px 1em !important; border-radius: 0px !important; border: 0px !important; border-image-source: initial !important; border-image-slice: initial !important; border-image-width: initial !important; border-image-outset: initial !important; border-image-repeat: initial !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important; white-space: nowrap !important; background-image: none !important; background-attachment: initial !important; background-color: rgb(244, 244, 244) !important; background-size: initial !important; background-origin: initial !important; background-clip: initial !important; background-position: initial !important; background-repeat: initial !important;"><code class="csharp spaces" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; background: none !important;">        </code><code class="csharp plain" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: rgb(0, 0, 0) !important; background: none !important;">cppFlags += </code><code class="csharp string" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: blue !important; background: none !important;">"-I${file("</code><code class="csharp plain" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: rgb(0, 0, 0) !important; background: none !important;">src/main/jni</code><code class="csharp comments" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: rgb(0, 130, 0) !important; background: none !important;">//include")}".toString()</code></div><div class="line number34 index33 alt1" style="color: rgb(51, 51, 51); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; margin: 0px !important; padding: 0px 1em !important; border-radius: 0px !important; border: 0px !important; border-image-source: initial !important; border-image-slice: initial !important; border-image-width: initial !important; border-image-outset: initial !important; border-image-repeat: initial !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important; white-space: nowrap !important; background-image: none !important; background-attachment: initial !important; background-size: initial !important; background-origin: initial !important; background-clip: initial !important; background-position: initial !important; background-repeat: initial !important;"><code class="csharp spaces" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; background: none !important;">        </code><code class="csharp plain" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: rgb(0, 0, 0) !important; background: none !important;">ldLibs += [</code><code class="csharp string" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: blue !important; background: none !important;">"android"</code><code class="csharp plain" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: rgb(0, 0, 0) !important; background: none !important;">, </code><code class="csharp string" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: blue !important; background: none !important;">"log"</code><code class="csharp plain" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: rgb(0, 0, 0) !important; background: none !important;">]</code></div><div class="line number35 index34 alt2" style="color: rgb(51, 51, 51); font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; margin: 0px !important; padding: 0px 1em !important; border-radius: 0px !important; border: 0px !important; border-image-source: initial !important; border-image-slice: initial !important; border-image-width: initial !important; border-image-outset: initial !important; border-image-repeat: initial !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important; white-space: nowrap !important; background-image: none !important; background-attachment: initial !important; background-color: rgb(244, 244, 244) !important; background-size: initial !important; background-origin: initial !important; background-clip: initial !important; background-position: initial !important; background-repeat: initial !important;"><code class="csharp spaces" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; background: none !important;">        </code><code class="csharp plain" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: rgb(0, 0, 0) !important; background: none !important;">stl = </code><code class="csharp string" style="margin: 0px !important; padding: 0px !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; min-height: auto !important; color: blue !important; background: none !important;">"gnustl_shared"</code></div><span style="color:#333333;">
}
android.buildTypes {
release {
minifyEnabled= false
proguardFiles+=file('proguard-rules.pro')
}
}

}
repositories {
maven { url "https://jitpack.io" }
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
/*androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.1', {
exclude group: 'com.android.support', module: 'support-annotations'
})*/
compile 'com.android.support:appcompat-v7:24.+'
compile 'com.android.support:design:24.+'
// testCompile 'junit:junit:4.12'

}
</span>
和自动生成的gradle相比,首先是 apply plugin: 'com.android.application' 变成了 apply plugin: 'com.android.model.application',如果是依赖工程的Module下面的build.gradle,文件的头是:
apply plugin: 'com.android.library' 应该改为  apply plugin: 'com.android.model.library'下面的配置也需要包装在model{}中。


这个gradle的配置有几点需要注意的:

  1. 所有值的设置都要写成 xxx = yyyy的形式,比如: applicationId
= "你的包名" (自动生成的gradle 则可能是: applicationId  "你的包名"  ),否则会爆这种错误:Error:Cause: org.gradle.api.internal.ExtensibleDynamicObject, 当出现此类错误,检查是否都用了 “=”的方式。

  2. buildTypes 需要从android{} 中取出来,写成android.buildTypes{}的形式,否则会出现这种错误:Error:Unable
to load class 'org.gradle.nativeplatform.internal.DefaultBuildType_Decorated'.    

   此外,自动生成的buildTypes的形式和上面的也不一样,为以下的形式:

  需要改成上面文件中的格式,否则会报这种错误:Error:No signature of method: org.gradle.model.ModelMap.minifyEnabled()
is applicable for argument types: (java.lang.Boolean) values: [false]     

  3. defaultConfig{} 需要写成defaultConfig.with{} 的形式,否则会报这种错误:Error:Cause: com.android.build.gradle.managed.AndroidConfig_Impl

  4. 在defaultConfig.with{} 中 需要写成 
    minSdkVersion.apiLevel  = 19
    targetSdkVersion.apiLevel = 23


    也就是比自动生成的多 .apiLevel ,否则会报这种错误:Unable
to load class com.android.build.gradle.managed.ProductFlavor_Impl

  5. 增加compileOptions.with{} 需要选择JavaVersion.VERSION_1_8(这个根据你的androidstudio依赖的Java的版本),否则会报这种错误:Bad
class file magic or version

  6. 最后一点,在gradleWrapper中使用的是2.5,则android.ndk {} 中类似cppFlags 的添加使用 += 的方式,否则需要使用 .add的方式

  以上可能遇到的问题我这里帮大家罗列出来,具体的请参考Google的文档,只不过这个文档需要FQ。

  最后设置gradle wrapper就好了,将左边的工程视图调整到Project,在gradle->wrapper->grale-wrapper.properties文件的最后设置:distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip,注意这里如果在Project
gradle中设置的是gradle-experimental:0.2.0,则这里选择gradle-2.5-all,如果是gradle-experimental:0.4.0,需要设置gradle-2.8-all。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: