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 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"**********\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" } }