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

![¼Í¼Ƭ¡¶À¬»ø³¡µÛ¹ú Junkyard Empire¡·[1080P][µÚ5¼¾¹²12¼¯ Ó¢ÓïÖÐ×Ö][°Ù¶ÈÍøÅÌ]](?wp-content/uploads/2025/08/1754046198-2690b732a0c4016-300x200.jpg)
![¼Í¼Ƭ¡¶Æû³µ¹¤ÒÕ Car Craft¡·[1080P][µÚ2¼¾¹²12¼¯ Ó¢ÓïÖÐ×Ö][°Ù¶ÈÍøÅÌ]](?wp-content/uploads/2025/08/1754879274-53eb7decdcfad66-300x200.jpg)
![¼Í¼Ƭ¡¶Â·É±ÌØ±ðÆª Roadkill Extra¡·[1080P][µÚ10²¿·Ö Ó¢ÓïÖÐ×Ö][°Ù¶ÈÍøÅÌ]](?wp-content/uploads/2025/08/1756020587-e74cd90eae76ee7-300x200.jpg)
