1.ÊÊÓ÷¶Î§

Java8

Kotlin£º1.3.11

Gradle£º3.1.2

Android Studio£º3.2

2.¼¯³É×¼±¸

ÔÚÅäÖÃCCÔĶÁandroid¿Í»§¶Ëǰ£¬ÇëÏÈÉêÇë°¢ÀïÈÈÐÞ¸´£¬ÓÑÃËͳ¼Æ£¬ÐÂÀË,QQ,΢ÐŵȵÚÈý·½Æ½Ì¨µÄAPPkey£¬¹ã¸æÄ¿Ç°½ÓÈëµÄÊǹãµãͨ¹ã¸æ£¬ÈçÐèÒª£¬ÉêÇë¹ãµãͨ¹ã¸æÎ»¡£ÈçÐèÍÆË͹¦ÄÜ£¬Ä¿Ç°Ö§³ÖСÃ×ÍÆËͼ°»ªÎªÍÆËÍ£¬ÇëÉêÇëÏàÓ¦¹¦ÄÜ¡£

°¢ÀïÈÈÐÞ¸´? ?https://help.aliyun.com/product/51340.html

ÓÑÃËͳ¼Æ? ?https://www.umeng.com

ÐÂÀË΢²©? ?https://open.weibo.com/

QQ? ?https://connect.qq.com/index.html

΢ÐÅ? ?https://open.weixin.qq.com/

¹ãµãͨ? ?https://e.qq.com/dev/index.html

СÃ×ÍÆËÍ? ?https://dev.mi.com/console/appservice/push.html

»ªÎªÍÆËÍ? ?https://developer.huawei.com/consumer/cn/service/hms/pushservice.html

Ö§¸¶±¦? ?https://open.alipay.com/platform/home.htm

°¢Àï¶ÌÐÅ https://help.aliyun.com/product/44282.html

΢ÐÅÖ§¸¶? ?https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F

3.ÅäÖÃÎļþ

1.ÔÚAndroid Studio¹¤³ÌÖеÄAppÄ£¿éÖеÄSophixStubApplicationÎļþÖÐÅäÖð¢ÀïÈÈÐÞ¸´µÄÏà¹ØÐÅÏ¢£º

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// Èç¹ûÐèҪʹÓÃMultiDex£¬ÐèÒªÔÚ´Ë´¦µ÷Óá£
MultiDex.install(this);
initSophix();
}
private void initSophix() {
String appVersion = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"0.0.0\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\";
try {
appVersion = this.getPackageManager()
.getPackageInfo(this.getPackageName(), 0)
.versionName;
} catch (Exception e) {}
final SophixManager instance = SophixManager.getInstance();
instance.setContext(this)
.setAppVersion(appVersion)
.setSecretMetaData(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecret\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecretToken\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
.setEnableDebug(true)
.setEnableFullLog()
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
Log.i(TAG, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"sophix load patch success!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// Èç¹ûÐèÒªÔÚºóÌ¨ÖØÆô£¬½¨Òé´Ë´¦ÓÃSharePreference±£´æ×´Ì¬¡£
Log.i(TAG, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"sophix preload patch success. restart app to make effect.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
}
}
}).initialize();
}
Èç²»ÐèÒª´Ë¹¦ÄÜ£¬ÔÚAndroidManifest.xmlÖÐÐÞ¸ÄapplicationµÄnameΪBookStoreApplication,²¢ÔÚBookStoreApplicationÀàµÄonCreate·½·¨ÖÐ×¢ÊÍ»òɾ³ýSophixManager.getInstance().queryAndLoadNewPatch()

2.ÔÚAndroid Studio¹¤³ÌÖеÄAppÄ£¿éÖеÄBookStoreApplicationÎļþÖУ¬ÅäÖÃÓÑÃËÏà¹ØÐÅÏ¢¼°Èý·½ÐÅÏ¢£¬ÓÃÓÚÈý·½µÇ¼¼°·ÖÏí¹¦ÄÜ£º

UMConfigure.init(this, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"ÓÑÃËkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",¡±ÇþµÀ¡±, UMConfigure.DEVICE_TYPE_PHONE, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
setScenarioType(this, MobclickAgent.EScenarioType.E_UM_NORMAL)
/**
* ÉèÖÃ×é¼þ»¯µÄLog¿ª¹Ø
* ²ÎÊý: boolean ĬÈÏΪfalse£¬ÈçÐè²é¿´LOGÉèÖÃΪtrue
*/
UMConfigure.setLogEnabled(BuildConfig.DEBUG_MODE)
PlatformConfig.setWeixin(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecret\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
PlatformConfig.setSinaWeibo(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecret\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"ÊÚȨ»Øµ÷µØÖ·\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
PlatformConfig.setQQZone(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecret\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
×¢ÒâQQ³ýÁËÔÚÕâ¶ùÅäÖÃÍ⣬ÔÚAndroidManifest.xmlÖÐÒ²ÐèÒªÅäÖÃ
/**
* ÓÑÃË-QQ
*/
<activity
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"com.tencent.tauth.AuthActivity\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:launchMode=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"singleTask\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:noHistory=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\">
<intent-filter>
<action android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.action.VIEW\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<category android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.category.DEFAULT\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<category android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.category.BROWSABLE\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<data android:scheme=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"tencentAPPKEY\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
</intent-filter>
</activity>
ÔÚAndroidManifest.xml»¹ÐèÒªÅäÖÃÓÑÃ˵ÄÇþµÀ
/**
* Channel IDÓÃÀ´±êʶAppµÄÍÆ¹ãÇþµÀ£¬×÷ÎªÍÆËÍÏûϢʱ¸øÓû§·Ö×éµÄÒ»¸öά¶È
*/
<meta-data
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"UMENG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:value=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"${CHANNEL_VALUE}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />

3.ÔÚAndroid Studio¹¤³ÌÖеÄAppÄ£¿éÖеÄBookStoreApplicationÎļþÖУ¬ÅäÖÃÍÆËÍÏà¹Ø¹¦ÄÜ¡£Ð¡Ã×ÍÆËÍ£º

private fun initMiuiPush() {
if (shouldInit()) {
MiPushClient.registerPush(this, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"AppID\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"AppKey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
}
// ´ò¿ªLog
val newLogger = object : LoggerInterface {
override fun setTag(tag: String) {
// ignore
}
override fun log(content: String, t: Throwable) {
Log.d(TAG, content, t)
}
override fun log(content: String) {
Log.d(TAG, content)
}
}
Logger.setLogger(this, newLogger)
}
»ªÎªÍÆËÍÖ÷ÒªÅäÖÃÔÚAndroidManifest.xmlÖУº
/**
* »ªÎªÍÆËÍ
*/
<meta-data
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"com.huawei.hms.client.appid\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:value=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appid=******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<meta-data
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"com.huawei.hms.version\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:value=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"2.6.1.301\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
»ªÎªÍÆËͽÓÊÕµ½µÄÊý¾ÝΪschemeÀàÐÍ£¬ÐèÒª×ÔÐÅÅäÖÃÏàÓ¦²ÎÊý
/**
* ½ÓÈëHMSSDK ÐèҪע²áµÄÓ¦ÓÃÏÂÔØ·þÎñ | Access HMSSDK need to register app download service
*/
<service
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"com.huawei.updatesdk.service.deamon.download.DownloadService\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:exported=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"false\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<activity android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\".book_push.HuaWeiReceiverActivity\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\">
<intent-filter>
<action android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.action.VIEW\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<category android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.category.DEFAULT\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<data
android:host=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"×Ô¶¨ÒåÓòÃû\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:path=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"/µØÖ·\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:scheme=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"customscheme\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
</intent-filter>
</activity>

4.ÔÚCommenTagÎļþÖУ¬ÅäÖùãµãͨ¹ã¸æ£º

const val AD_APPKEY = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
// ¿ªÆÁÒ³¹ã¸æÎ»
const val AD_SPLASH_KEY = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
//ÔĶÁÒ³µ×²¿¹ã¸æÎ»
const val AD_BANNER_KEY = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
//ÔĶÁÒ³Õ½Úĩβ¹ã¸æÎ»
const val AD_NATIVE_IMAGE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
//ÓÀÀûyl23411¼¯ÍŹÙÍøbanner×îºóһҳչʾ¹ã¸æÎ»
const val AD_NATIVE_BANNER_IMAGE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"

5.ÅäÖÃÓÑÃËͳ¼Æ¶àÇþµÀ£¬ÔÚconfig.gradleÖж¨ÒåÇþµÀÃû³Æ£¨Ê¾ÀýÖÐΪÇþµÀcc1/cc2/cc3/cc4£©

channel = [
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc5\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc5\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
]
ÔÚappÄ£¿éÖеÄbuild.gradleÖÐÒýÓÃÏàÓ¦ÇþµÀͬʱ£¬ÔÚreadviewlibraryÖеÄbuild.gradleÖÐÓ¦ÓÃÏàÓ¦ÇþµÀ
productFlavors {
cc1 {
manifestPlaceholders = [CHANNEL_VALUE:channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]]
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
versionCode rootProject.ext.android_version.ccVersionCode
versionName rootProject.ext.android_version.ccVersionName
}
cc2 {
manifestPlaceholders = [CHANNEL_VALUE: channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]]
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
versionCode rootProject.ext.android_version.ccVersionCode
versionName rootProject.ext.android_version.ccVersionName
}
cc3 {
manifestPlaceholders = [CHANNEL_VALUE: channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]]
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
versionCode rootProject.ext.android_version.ccVersionCode
versionName rootProject.ext.android_version.ccVersionName
}
cc4 {
manifestPlaceholders = [CHANNEL_VALUE: channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]]
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
versionCode rootProject.ext.android_version.ccVersionCode
versionName rootProject.ext.android_version.ccVersionName
}
}
productFlavors {
cc1 {
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", rootProject.ext.channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
}
cc2 {
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", rootProject.ext.channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
}
cc3 {
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", rootProject.ext.channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
}
cc4 {
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", rootProject.ext.channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
}
}
6.΢ÐÅÖ§¸¶ÅäÖã¬×¢Òâ΢ÐŵǼ¼°Î¢ÐÅÖ§¸¶½á¹û»Øµ÷ÀàWXEntryActivityºÍWXPayEntryActivityÊÇÔÚ°üÃûÎļþ¼ÐϵÄwxapiÖУ¬ÊôÓÚ×îÍâ²ãµÄÒ»¼¶Îļþ¼Ð¡£

7.¹ØÓÚÓÑÃËÅäÖÃÇ©ÃûÎļþ£¬ÔÚappÄ£¿éϵÄbuild.gradleÖÐÅäÖÃÓ¦ÓõÄÇ©ÃûÎļþ

signingConfigs {
debug {
toreFile file(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'jksÎļþµØÖ·\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')
storePassword \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*********\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
keyAlias \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*****\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
keyPassword \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*********\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
}
release {
storeFile file(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'jksÎļþµØÖ·\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')
storePassword \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
keyAlias \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*****\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
keyPassword \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"**********\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
}
}

±¾Õ¾ËùÓÐ×ÊÔ´°æÈ¨¾ùÊôÓÚÔ­×÷ÕßËùÓУ¬ÕâÀïËùÌṩ×ÊÔ´¾ùÖ»ÄÜÓÃÓڲο¼Ñ§Ï°Óã¬ÇëÎðÖ±½ÓÉÌÓá£ÈôÓÉÓÚÉÌÓÃÒýÆð°æÈ¨¾À·×£¬Ò»ÇÐÔðÈξùÓÉʹÓÃÕ߳е£¡£¸ü¶à˵Ã÷Çë²Î¿¼ VIP½éÉÜ¡£

×î³£¼ûµÄÇé¿öÊÇÏÂÔØ²»ÍêÕû: ¿É¶Ô±ÈÏÂÔØÍêѹËõ°üµÄÓëÍøÅÌÉϵÄÈÝÁ¿£¬ÈôСÓÚÍøÅÌÌáʾµÄÈÝÁ¿ÔòÊÇÕâ¸öÔ­Òò¡£ÕâÊÇä¯ÀÀÆ÷ÏÂÔØµÄbug£¬½¨ÒéÓðٶÈÍøÅÌÈí¼þ»òѸÀ×ÏÂÔØ¡£ ÈôÅųýÕâÖÖÇé¿ö£¬¿ÉÔÚ¶ÔÓ¦×ÊÔ´µ×²¿ÁôÑÔ£¬»òÁªÂçÎÒÃÇ¡£

¶ÔÓÚ»áԱרÏí¡¢ÕûÕ¾Ô´Âë¡¢³ÌÐò²å¼þ¡¢ÍøÕ¾Ä£°å¡¢ÍøÒ³Ä£°æµÈÀàÐ͵ÄËØ²Ä£¬ÎÄÕÂÄÚÓÃÓÚ½éÉܵÄͼƬͨ³£²¢²»°üº¬ÔÚ¶ÔÓ¦¿É¹©ÏÂÔØËØ²Ä°üÄÚ¡£ÕâЩÏà¹ØÉÌҵͼƬÐèÁíÍ⹺Âò£¬ÇÒ±¾Õ¾²»¸ºÔð(ҲûÓа취)ÕÒµ½³ö´¦¡£ ͬÑùµØÒ»Ð©×ÖÌåÎļþÒ²ÊÇÕâÖÖÇé¿ö£¬µ«²¿·ÖËØ²Ä»áÔÚËØ²Ä°üÄÚÓÐÒ»·Ý×ÖÌåÏÂÔØÁ´½ÓÇåµ¥¡£

Èç¹ûÄúÒѾ­³É¹¦¸¶¿îµ«ÊÇÍøÕ¾Ã»Óе¯³ö³É¹¦Ìáʾ£¬ÇëÁªÏµÕ¾³¤Ìṩ¸¶¿îÐÅϢΪÄú´¦Àí

Ô´ÂëËØ²ÄÊôÓÚÐéÄâÉÌÆ·£¬¾ßÓпɸ´ÖÆÐÔ£¬¿É´«²¥ÐÔ£¬Ò»µ©ÊÚÓ裬²»½ÓÊÜÈκÎÐÎʽµÄÍ˿»»»õÒªÇó¡£ÇëÄúÔÚ¹ºÂò»ñȡ֮ǰȷÈϺà ÊÇÄúËùÐèÒªµÄ×ÊÔ´