diff --git a/com.diy.emoticon.free.zcaqf.game.launcher.json b/com.diy.emoticon.free.zcaqf.game.launcher.json new file mode 100644 index 0000000..bc9328e --- /dev/null +++ b/com.diy.emoticon.free.zcaqf.game.launcher.json @@ -0,0 +1,22 @@ +{ + "repo_url": "http://192.168.0.200:3000/Faxing/Lawnchair.git", + "repo_branch": "touka-dev-new-unity", + "repo_commit": "", + "package_name": "com.diy.emoticon.free.zcaqf.game.launcher", + "game_type": "unity_native", + "version_display_name": "1.0.20", + "version_code": 20, + "string": { + "base": { + "gl_splash_title": "Wield your imagination and create your own Emoticons!", + "gl_welcome_wifi": "Drag to Merge diffrent Emoticons for a new one", + "gl_welcome_mag": "Tap and Drag to Create and Edit your own Emoticon", + "s": "Save your Emoticon to your device and share" + }, + "zh": { + "gl_splash_title": "描述", + "gl_welcome_wifi": "玩法1", + "gl_welcome_mag": "玩法2" + } + } +} \ No newline at end of file diff --git a/com.emoticon.diy.znfav.launcher.free.json b/com.emoticon.diy.znfav.launcher.free.json index 69e9fae..f200ae4 100644 --- a/com.emoticon.diy.znfav.launcher.free.json +++ b/com.emoticon.diy.znfav.launcher.free.json @@ -1,6 +1,6 @@ { "repo_url": "http://192.168.0.200:3000/Faxing/Lawnchair.git", - "repo_branch": "touka-dev-3.0", + "repo_branch": "touka-dev-new-unity", "repo_commit": "", "package_name": "com.emoticon.diy.znfav.launcher.free", "game_type": "unity_native", diff --git a/com.fill.heart.finger.free.puzzle.launcher.lperc.json b/com.fill.heart.finger.free.puzzle.launcher.lperc.json new file mode 100644 index 0000000..47ee894 --- /dev/null +++ b/com.fill.heart.finger.free.puzzle.launcher.lperc.json @@ -0,0 +1,21 @@ +{ + "repo_url": "http://192.168.0.200:3000/Faxing/Lawnchair.git", + "repo_branch": "touka-dev-new-unity", + "repo_commit": "", + "package_name": "com.fill.heart.finger.free.puzzle.launcher.lperc", + "game_type": "unity_native", + "version_display_name": "1.0.19", + "version_code": 19, + "string": { + "base": { + "gl_splash_title": "Draw to Fill the Heart and Make them Happy!", + "gl_welcome_wifi": "Drag to Draw Line", + "gl_welcome_mag": "Complete the Heart to Pass Level" + }, + "zh": { + "gl_splash_title": "描述", + "gl_welcome_wifi": "玩法1", + "gl_welcome_mag": "玩法2" + } + } +} \ No newline at end of file diff --git a/com.human.assemble.launcher.czaeg.free.json b/com.human.assemble.launcher.czaeg.free.json new file mode 100644 index 0000000..cb46afb --- /dev/null +++ b/com.human.assemble.launcher.czaeg.free.json @@ -0,0 +1,22 @@ +{ + "repo_url": "http://192.168.0.200:3000/Faxing/Lawnchair.git", + "repo_branch": "touka-dev-new-unity", + "repo_commit": "", + "package_name": "com.human.assemble.launcher.czaeg.free", + "game_type": "unity_native", + "version_display_name": "1.0.8", + "version_code": 8, + "string": { + "base": { + "gl_splash_title": "Assemble body parts, then complete hilarious challenges!", + "gl_welcome_wifi": "Select body parts to put onto torso", + "gl_welcome_mag": "Drag to control the body to defeat enemy", + "s": "Unlock more powerful or wierd body parts" + }, + "zh": { + "gl_splash_title": "描述", + "gl_welcome_wifi": "玩法1", + "gl_welcome_mag": "玩法2" + } + } +} \ No newline at end of file diff --git a/com.prank.puncher.game.free.puzzle.sgwee.json b/com.prank.puncher.game.free.puzzle.sgwee.json new file mode 100644 index 0000000..a1d7311 --- /dev/null +++ b/com.prank.puncher.game.free.puzzle.sgwee.json @@ -0,0 +1,21 @@ +{ + "repo_url": "http://192.168.0.200:3000/Faxing/Lawnchair.git", + "repo_branch": "touka-dev-new-unity", + "repo_commit": "", + "package_name": "com.prank.puncher.game.free.puzzle.sgwee", + "game_type": "unity_native", + "version_display_name": "1.0.6", + "version_code": 6, + "string": { + "base": { + "gl_splash_title": "Annoyed by Pranksters? Just Punch'em!", + "gl_welcome_wifi": "Tap on pranksters to punch them", + "gl_welcome_mag": "Punch on items to find out their powers" + }, + "zh": { + "gl_splash_title": "描述", + "gl_welcome_wifi": "玩法1", + "gl_welcome_mag": "玩法2" + } + } +} \ No newline at end of file diff --git a/com.punch.prankster.puzzle.fwaes.free.launcher.fgsaw.json b/com.punch.prankster.puzzle.fwaes.free.launcher.fgsaw.json new file mode 100644 index 0000000..253bb3b --- /dev/null +++ b/com.punch.prankster.puzzle.fwaes.free.launcher.fgsaw.json @@ -0,0 +1,9 @@ +{ + "repo_url": "http://192.168.0.200:3000/Faxing/Lawnchair.git", + "repo_branch": "touka-dev-new-unity", + "repo_commit": "", + "package_name": "com.punch.prankster.puzzle.fwaes.free.launcher.fgsaw", + "game_type": "unity_native", + "version_display_name": "1.0.4", + "version_code": 4 +} \ No newline at end of file diff --git a/com.satiszen.tidy.asmr.zxffg.free.launcher.json b/com.satiszen.tidy.asmr.zxffg.free.launcher.json new file mode 100644 index 0000000..0c20c24 --- /dev/null +++ b/com.satiszen.tidy.asmr.zxffg.free.launcher.json @@ -0,0 +1,23 @@ +{ + "repo_url": "http://192.168.0.200:3000/Faxing/Lawnchair.git", + "repo_branch": "touka-dev-new-unity", + "repo_commit": "", + "package_name": "com.satiszen.tidy.asmr.zxffg.free.launcher", + "game_type": "unity_native", + "version_display_name": "1.0.900", + "version_code": 900, + "app_name": "Satiszen: Tidy ASMR Launcher", + "string": { + "base": { + "gl_splash_title": "An awesome way to satisfy your OCD", + "gl_welcome_wifi": "Sort and put away cluttered drawers", + "gl_welcome_mag": "Complete daily cleaning tasks", + "s": "Unlock tips and rewards" + }, + "zh": { + "gl_splash_title": "描述", + "gl_welcome_wifi": "玩法1", + "gl_welcome_mag": "玩法2" + } + } +} \ No newline at end of file diff --git a/game_config/com.diy.emoticon.free.zcaqf.game.launcher/com.diy.emoticon.free.zcaqf.game.launcher_android.zip b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/com.diy.emoticon.free.zcaqf.game.launcher_android.zip new file mode 100644 index 0000000..ba69787 Binary files /dev/null and b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/com.diy.emoticon.free.zcaqf.game.launcher_android.zip differ diff --git a/game_config/com.diy.emoticon.free.zcaqf.game.launcher/diyemoji.keystore b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/diyemoji.keystore new file mode 100644 index 0000000..bea651f Binary files /dev/null and b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/diyemoji.keystore differ diff --git a/game_config/com.diy.emoticon.free.zcaqf.game.launcher/drawable-xxhdpi.zip b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/drawable-xxhdpi.zip new file mode 100644 index 0000000..201479d Binary files /dev/null and b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/drawable-xxhdpi.zip differ diff --git a/game_config/com.diy.emoticon.free.zcaqf.game.launcher/icon.zip b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/icon.zip new file mode 100644 index 0000000..e7a0765 Binary files /dev/null and b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/icon.zip differ diff --git a/game_config/com.diy.emoticon.free.zcaqf.game.launcher/unityLibrary.zip b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/unityLibrary.zip new file mode 100644 index 0000000..b52f1bf Binary files /dev/null and b/game_config/com.diy.emoticon.free.zcaqf.game.launcher/unityLibrary.zip differ diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android.zip b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android.zip new file mode 100644 index 0000000..70a434b Binary files /dev/null and b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android.zip differ diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/appConfig/02bfebd23d4e17d7e1350cbc9ee5ca13 b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/appConfig/02bfebd23d4e17d7e1350cbc9ee5ca13 new file mode 100644 index 0000000..49fcff9 --- /dev/null +++ b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/appConfig/02bfebd23d4e17d7e1350cbc9ee5ca13 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/appConfig/google-services.json b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/appConfig/google-services.json new file mode 100644 index 0000000..7281383 --- /dev/null +++ b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/appConfig/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "567313628193", + "project_id": "ag188b6b33bb-eaf27-gp", + "storage_bucket": "ag188b6b33bb-eaf27-gp.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:567313628193:android:23a2087d32d28371b57760", + "android_client_info": { + "package_name": "com.fill.heart.finger.free.puzzle.launcher.lperc" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyDqod-zddRoTGKl8SlnvT22-8jgzOnVGbw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/tkg_config.properties b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/tkg_config.properties new file mode 100644 index 0000000..f45857e --- /dev/null +++ b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/tkg_config.properties @@ -0,0 +1,239 @@ +#=================基础配置============================= +#游戏名称 +app_name=Fill Heart Finger Launcher +#包名 +package_name=com.fill.heart.finger.free.puzzle.launcher.lperc +#闪屏图(&健康提示),值:图片名字,没有填"",详见需求文档(- 新增splash图 部分):https://pic6ktmsyi.feishu.cn/docs/doccnRdYblZyPN2HpIK6nsJmqSb# +splash_img= +#游戏横竖屏,根据游戏横竖屏取值 值: 0 竖屏, 1 横屏 +game_screen_orientation=0 +#发行主体 +publish_account=GLC_003 + +#渠道 +channel=GooglePlay +#子渠道 +sub_channel= +#客户端协议上报u8 appid +tk_app_id=55759d500c6ec10cf37a57f27d03bfdc + +#外部测试使用facebook id +fb_appid= +fb_client_token= +#adjust_id{} +adjust_id=y5ovnytkzk00 +#巨量app id废弃 +rangers_applog_id= +#发行人app id +publisher_appid= +publisher_url_scheme= + +#调试模式(写死不动,仅供调试使用) +#debug_mode=false + + +#=================用户协议(弹窗)配置============================= +#游戏类型 +TkA_Type= +#游戏题材 +TkA_Theme= +#适龄,取值:8|12|16|18 +TkA_Age= +#隐私政策url +TkA_Url_Privacy=https://yemgame.com/privacy.html +#用户协议url +TkA_Url_Agreement= +#数数上报地址 +ss_url=https://td.yemgame.com +#中台域名 +zt_url= + +#=================广告通用配置============================= +#广告平台,max|topon|xiaomi +ad_platform=max + +#广告appid (包括max applovin.sdk.key) +ad_appid=h1gpba13svkeiu@7d3af77b0803cbc641888cb393e8652e +#广告appkey +ad_appkey=qQ7XVQbkl0J5pGUvq0ZdvhP9RtIwVA2m0SMT_HHzFkEwFdUCovsckr27CKGLamD04hzLWq0m5Iq50E39DkhumR +#admob id +admob_id=ca-app-pub-1392995944739082~3571770572 +#GoogleAnalytics跟踪ID +TRACKING_ID=504893697 +# +keystore=0 + +#游戏软著著作人 +copyright_holder= +#游戏软著登记号 +copyright_id= + + +#开屏广告位id +ad_splash_id=@disable +ad_native_splash_id= +#插屏广告位id +ad_interstital_id=@disable +#半屏插屏广告位id(小米广告区分全/半屏) +ad_interstital_half_id= +#激励视频广告位id +ad_reward_id=@disable +ad_reward_id_review= +#banner广告位id +ad_banner_id=@disable +ad_native_banner_id= +# 原生模板广告位id [增加] +ad_templete_natvie_id= + +# 原生自渲染广告位id [增加] +ad_render_native_id=@disable + + +#=================TW配置============================= +#[TODO][meta-data]百度 APPID +BaiduMobAd_APP_ID= + +#副包下载链接 +FB_DOWNLOAD_URL= +FB_POP_CONFIG_DAT_URL= +#更多游戏链接 +tka_url_moregame= + +#TW广告位 +#SDK插屏 +ad_sk_interstital_id= +#SDK开屏 +ad_sk_splash_id= +#SDK信息流 +ad_sk_native_id= +#SDK信息流1 +ad_sk_native1_id= + +#[TODO][meta-data]游戏主 Activity: +#取值 Unity游戏: com.u8.sdk.U8UnityContext +#flash游戏: com.u8.sdk.ane.U8ANEActivity +#Cocos游戏: com.u8.sdk.U8CocosActivity +MAIN_ACTIVITY=com.u8.sdk.U8UnityContext + +#极光 AppKey,默认空 +JPUSH_APPKEY= + + +#客服邮箱 +tkg_custom=masiyem186@gmail.com +#ASN接口 +asn_url=https://yemgame.com/land/bed + +channel_appid= +channel_appkey= +channel_appsecret= + + +#=================Bugly============================= +Bugly_AppID= +Bugly_AppKey= + + +#=================YSDK实名认证============================= +#[TODO][ysdkconf.ini]腾讯AppID +OFFER_ID= + + +#=================Umeng配置============================= +#UM Appkey +UM_APP_KEY= +#json 参数 key +JSON_PARAM_KEY= +#[TODO][文件类型参数]默认 (在线) 参数配置 +UMENG_DEFAULT_ONLINE_CONFIG= + +#=================GA配置============================= +#GA AppKey +GA_KEY= +#GA AppSecret +GA_SECRETKEY= + +#=================热云配置============================= +#AppKey +RN_APP_KEY= + +#=================Tenjin配置============================= +#Tenjin ApiKey +TENJIN_API_KEY=PYOTVKJ4XZJHSMZW2V6GBQRCNXAFKWU2 + +# 数数appid +ss_app_id=703bb2a3d27e414f8bc83fc465a155f4 + +# 是否有登录系统 +has_user_system= + +# 微信appKey&appSecret +wechat_app_id= +wechat_app_secret= + +#==============亚马逊配置============ + +AmazonAppId= +AmazonMRECSlotID= +AmazonBannerSlotID= +AmazonLeaderSlotID= +AmazonInterSlotID= +AmazonVideoSlotID= + +# Topon插屏 +AD_Inter = n1gpba13ube660 +# Topon激励视频 +AD_Reward = n1gpba13umi2km +# Admob聚合应用ID +Admob_APP_ID = ca-app-pub-1392995944739082~3571770572 +# Admob聚合插屏广告单元ID +Admob_IV_ID = ca-app-pub-1392995944739082/3906866392 +# Admob聚合激励广告单元ID +Admob_RV_ID = ca-app-pub-1392995944739082/9482626702 +# Admob聚合信息流广告单元ID +Admob_NATIVE_ID = ca-app-pub-1392995944739082/8009762936 +# 全屏Native +Admob_FULL_NATIVE_ID = ca-app-pub-1392995944739082/9989839261 +# 小型广告 +ADMOB_SMALL_NATIVE_ID = ca-app-pub-1392995944739082/3065338262 +# pangle 聚合APP ID +Pangle_APP_ID = 8712016 +# pangle 插屏 +Pangle_IV_ID = 982340388 +# pangle 激励 +Pangle_RV_ID = 982340379 +#=========路由配置================= +# Debug IAP日志上报 +TF_IAP_REPORT_TMP=https://fds.fnpserver.com/hkoc/report/iaptm +# IAP上报&支付二次认证 +TF_IAP_REPORT=https://fds.fnpserver.com/hkoc/report/iap +# 用户绑定 +TF_USER_BIND=https://fds.fnpserver.com/hkoc/user/bind +# 云存储详情 +TF_USER_PROGRESS_DETAIL=https://fds.fnpserver.com/hkoc/thd/usprogress/detail +# 用户更新 +TF_USER_UPDATE=https://fds.fnpserver.com/hkoc/user/update +# 敏感词审核 +TF_USER_CENSOR_TEXT=https://fds.fnpserver.com/hkoc/user/censor-text +# 国内省份列表 +TF_USER_CN_PROVINCE_LIST=https://fds.fnpserver.com/hkoc/cn/app/provinces +# 国家列表 +TF_USER_COUNTRY_LIST=https://fds.fnpserver.com/hkoc/app/countries +# 排行榜用户 +TF_USER_RANKING_USER=https://fds.fnpserver.com/hkoc/user/ranking-user +# Google翻译 +TF_USER_GOOGLE_TRANSLATE=https://fds.fnpserver.com/hkoc/user/translate +# 归因数据中台 +TRACK_EVENT_LOG=https://pu.fnpserver.com/log/event +# 云存储保存 +TF_USER_PROGRESS_SAVE=https://fds.fnpserver.com/hkoc/thd/usprogress/save +# 用户详情 +TF_USER_DETAIL=https://fds.fnpserver.com/hkoc/user/detail +# 积分上报 +TF_USER_SCORE_REPORT=https://fds.fnpserver.com/hkoc/user/score-report +# 用户登录 +TF_USER_LOGIN=https://fds.fnpserver.com/hkoc/user/login +# 用户删除 +TF_USER_DEL=https://fds.fnpserver.com/hkoc/user/delete +# 排行榜区域 +TF_USER_RANKING_AREA=https://fds.fnpserver.com/hkoc/user/ranking-area \ No newline at end of file diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/tkg_config_mainly.properties b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/tkg_config_mainly.properties new file mode 100644 index 0000000..cdd9c12 --- /dev/null +++ b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/com.fill.heart.finger.free.puzzle.launcher.lperc_android/tkg_config_mainly.properties @@ -0,0 +1,122 @@ +#=================基础配置============================= +#游戏名称 +app_name=Fill Heart Finger Launcher +#包名 +package_name=com.fill.heart.finger.free.puzzle.launcher.lperc +#发行主体 +publish_account=GLC_003 +#渠道 +channel=GooglePlay +#隐私政策 +TkA_Url_Privacy=https://yemgame.com/privacy.html +#数数上报地址 +ss_url=https://td.yemgame.com +#中台域名 +zt_url= + +#=========归因统计================= +#Adjust +adjust_id=y5ovnytkzk00 + +#GoogleAnalytics跟踪ID +TRACKING_ID=504893697 + +#=========广告配置================= +#广告平台,max|topon|xiaomi +ad_platform=max + +#广告appid (包括max applovin.sdk.key) +ad_appid=h1gpba13svkeiu@7d3af77b0803cbc641888cb393e8652e + +#广告appkey +ad_appkey=qQ7XVQbkl0J5pGUvq0ZdvhP9RtIwVA2m0SMT_HHzFkEwFdUCovsckr27CKGLamD04hzLWq0m5Iq50E39DkhumR + +#admob id +admob_id=ca-app-pub-1392995944739082~3571770572 + +#开屏广告位id +ad_splash_id=@disable +#插屏广告位id +ad_interstital_id=@disable +#激励视频广告位id +ad_reward_id=@disable +ad_reward_id_review= +#banner广告位id +ad_banner_id=@disable +# 原生模板广告位id +ad_templete_natvie_id= +# 原生自渲染广告位id +ad_render_native_id=@disable + +# 数数appid +ss_app_id=703bb2a3d27e414f8bc83fc465a155f4 + +# 是否有登录系统 +has_user_system= + +# 微信appKey&appSecret +wechat_app_id= +wechat_app_secret= + +#客服邮箱 +tkg_custom=masiyem186@gmail.com +#ASN接口 +asn_url=https://yemgame.com/land/bed + +# Topon插屏 +AD_Inter = n1gpba13ube660 +# Topon激励视频 +AD_Reward = n1gpba13umi2km +# Admob聚合应用ID +Admob_APP_ID = ca-app-pub-1392995944739082~3571770572 +# Admob聚合插屏广告单元ID +Admob_IV_ID = ca-app-pub-1392995944739082/3906866392 +# Admob聚合激励广告单元ID +Admob_RV_ID = ca-app-pub-1392995944739082/9482626702 +# Admob聚合信息流广告单元ID +Admob_NATIVE_ID = ca-app-pub-1392995944739082/8009762936 +# 全屏Native +Admob_FULL_NATIVE_ID = ca-app-pub-1392995944739082/9989839261 +# 小型广告 +ADMOB_SMALL_NATIVE_ID = ca-app-pub-1392995944739082/3065338262 +# pangle 聚合APP ID +Pangle_APP_ID = 8712016 +# pangle 插屏 +Pangle_IV_ID = 982340388 +# pangle 激励 +Pangle_RV_ID = 982340379 +#=========路由配置================= +# Debug IAP日志上报 +TF_IAP_REPORT_TMP=https://fds.fnpserver.com/hkoc/report/iaptm +# IAP上报&支付二次认证 +TF_IAP_REPORT=https://fds.fnpserver.com/hkoc/report/iap +# 用户绑定 +TF_USER_BIND=https://fds.fnpserver.com/hkoc/user/bind +# 云存储详情 +TF_USER_PROGRESS_DETAIL=https://fds.fnpserver.com/hkoc/thd/usprogress/detail +# 用户更新 +TF_USER_UPDATE=https://fds.fnpserver.com/hkoc/user/update +# 敏感词审核 +TF_USER_CENSOR_TEXT=https://fds.fnpserver.com/hkoc/user/censor-text +# 国内省份列表 +TF_USER_CN_PROVINCE_LIST=https://fds.fnpserver.com/hkoc/cn/app/provinces +# 国家列表 +TF_USER_COUNTRY_LIST=https://fds.fnpserver.com/hkoc/app/countries +# 排行榜用户 +TF_USER_RANKING_USER=https://fds.fnpserver.com/hkoc/user/ranking-user +# Google翻译 +TF_USER_GOOGLE_TRANSLATE=https://fds.fnpserver.com/hkoc/user/translate +# 归因数据中台 +TRACK_EVENT_LOG=https://pu.fnpserver.com/log/event +# 云存储保存 +TF_USER_PROGRESS_SAVE=https://fds.fnpserver.com/hkoc/thd/usprogress/save +# 用户详情 +TF_USER_DETAIL=https://fds.fnpserver.com/hkoc/user/detail +# 积分上报 +TF_USER_SCORE_REPORT=https://fds.fnpserver.com/hkoc/user/score-report +# 用户登录 +TF_USER_LOGIN=https://fds.fnpserver.com/hkoc/user/login +# 用户删除 +TF_USER_DEL=https://fds.fnpserver.com/hkoc/user/delete +# 排行榜区域 +TF_USER_RANKING_AREA=https://fds.fnpserver.com/hkoc/user/ranking-area \ No newline at end of file diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/drawable-xxhdpi.zip b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/drawable-xxhdpi.zip new file mode 100644 index 0000000..7bd3eb5 Binary files /dev/null and b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/drawable-xxhdpi.zip differ diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/fingerfill.keystore b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/fingerfill.keystore new file mode 100644 index 0000000..4b53d8a Binary files /dev/null and b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/fingerfill.keystore differ diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/icon.zip b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/icon.zip new file mode 100644 index 0000000..b49dac1 Binary files /dev/null and b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/icon.zip differ diff --git a/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/unityLibrary.zip b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/unityLibrary.zip new file mode 100644 index 0000000..f0b15e5 Binary files /dev/null and b/game_config/com.fill.heart.finger.free.puzzle.launcher.lperc/unityLibrary.zip differ diff --git a/game_config/com.human.assemble.launcher.czaeg.free/com.human.assemble.launcher.czaeg.free_GooglePlay.zip b/game_config/com.human.assemble.launcher.czaeg.free/com.human.assemble.launcher.czaeg.free_GooglePlay.zip new file mode 100644 index 0000000..465ff88 Binary files /dev/null and b/game_config/com.human.assemble.launcher.czaeg.free/com.human.assemble.launcher.czaeg.free_GooglePlay.zip differ diff --git a/game_config/com.human.assemble.launcher.czaeg.free/drawable-xxhdpi.zip b/game_config/com.human.assemble.launcher.czaeg.free/drawable-xxhdpi.zip new file mode 100644 index 0000000..76645e1 Binary files /dev/null and b/game_config/com.human.assemble.launcher.czaeg.free/drawable-xxhdpi.zip differ diff --git a/game_config/com.human.assemble.launcher.czaeg.free/humanassemble.keystore b/game_config/com.human.assemble.launcher.czaeg.free/humanassemble.keystore new file mode 100644 index 0000000..02df4f7 Binary files /dev/null and b/game_config/com.human.assemble.launcher.czaeg.free/humanassemble.keystore differ diff --git a/game_config/com.human.assemble.launcher.czaeg.free/icon.zip b/game_config/com.human.assemble.launcher.czaeg.free/icon.zip new file mode 100644 index 0000000..1a14b37 Binary files /dev/null and b/game_config/com.human.assemble.launcher.czaeg.free/icon.zip differ diff --git a/game_config/com.human.assemble.launcher.czaeg.free/unityLibrary.zip b/game_config/com.human.assemble.launcher.czaeg.free/unityLibrary.zip new file mode 100644 index 0000000..ea5422a Binary files /dev/null and b/game_config/com.human.assemble.launcher.czaeg.free/unityLibrary.zip differ diff --git a/game_config/com.prank.puncher.game.free.puzzle.sgwee/com.prank.puncher.game.free.puzzle.sgwee_GooglePlay.zip b/game_config/com.prank.puncher.game.free.puzzle.sgwee/com.prank.puncher.game.free.puzzle.sgwee_GooglePlay.zip new file mode 100644 index 0000000..501caf3 Binary files /dev/null and b/game_config/com.prank.puncher.game.free.puzzle.sgwee/com.prank.puncher.game.free.puzzle.sgwee_GooglePlay.zip differ diff --git a/game_config/com.prank.puncher.game.free.puzzle.sgwee/drawable-xxhdpi.zip b/game_config/com.prank.puncher.game.free.puzzle.sgwee/drawable-xxhdpi.zip new file mode 100644 index 0000000..2b890ca Binary files /dev/null and b/game_config/com.prank.puncher.game.free.puzzle.sgwee/drawable-xxhdpi.zip differ diff --git a/game_config/com.prank.puncher.game.free.puzzle.sgwee/icon.zip b/game_config/com.prank.puncher.game.free.puzzle.sgwee/icon.zip new file mode 100644 index 0000000..7f59272 Binary files /dev/null and b/game_config/com.prank.puncher.game.free.puzzle.sgwee/icon.zip differ diff --git a/game_config/com.prank.puncher.game.free.puzzle.sgwee/prankpuncher.keystore b/game_config/com.prank.puncher.game.free.puzzle.sgwee/prankpuncher.keystore new file mode 100644 index 0000000..c161711 Binary files /dev/null and b/game_config/com.prank.puncher.game.free.puzzle.sgwee/prankpuncher.keystore differ diff --git a/game_config/com.prank.puncher.game.free.puzzle.sgwee/unityLibrary.zip b/game_config/com.prank.puncher.game.free.puzzle.sgwee/unityLibrary.zip new file mode 100644 index 0000000..3a33ede Binary files /dev/null and b/game_config/com.prank.puncher.game.free.puzzle.sgwee/unityLibrary.zip differ diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android.zip b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android.zip new file mode 100644 index 0000000..703f1a4 Binary files /dev/null and b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android.zip differ diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/appConfig/9d1b8fe15828593c3fc0c5cc1e8f04b2 b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/appConfig/9d1b8fe15828593c3fc0c5cc1e8f04b2 new file mode 100644 index 0000000..9add991 --- /dev/null +++ b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/appConfig/9d1b8fe15828593c3fc0c5cc1e8f04b2 @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/appConfig/google-services.json b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/appConfig/google-services.json new file mode 100644 index 0000000..8b6022e --- /dev/null +++ b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/appConfig/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "826703137242", + "project_id": "ageebe4c560e-1a6c4-gp", + "storage_bucket": "ageebe4c560e-1a6c4-gp.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:826703137242:android:f8f0029b71b7915a05d8e3", + "android_client_info": { + "package_name": "com.satiszen.tidy.asmr.zxffg.free.launcher" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyCpi7dbmXK06gepr45uxfS793r03u8v0_s" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/tkg_config.properties b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/tkg_config.properties new file mode 100644 index 0000000..7c24ec1 --- /dev/null +++ b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/tkg_config.properties @@ -0,0 +1,241 @@ +#=================基础配置============================= +#游戏名称 +app_name=Satiszen Tidy ASMR Launcher +#包名 +package_name=com.satiszen.tidy.asmr.zxffg.free.launcher +#闪屏图(&健康提示),值:图片名字,没有填"",详见需求文档(- 新增splash图 部分):https://pic6ktmsyi.feishu.cn/docs/doccnRdYblZyPN2HpIK6nsJmqSb# +splash_img= +#游戏横竖屏,根据游戏横竖屏取值 值: 0 竖屏, 1 横屏 +game_screen_orientation=0 +#发行主体 +publish_account=GLC_004 + +#渠道 +channel=GooglePlay +#子渠道 +sub_channel= +#客户端协议上报u8 appid +tk_app_id=788dc6532930a7cc71ac2fb4966bc03c + +#外部测试使用facebook id +fb_appid= +fb_client_token= +#adjust_id{} +adjust_id=sn8qbtk0tdz4 +#巨量app id废弃 +rangers_applog_id= +#发行人app id +publisher_appid= +publisher_url_scheme= + +#调试模式(写死不动,仅供调试使用) +#debug_mode=false + + +#=================用户协议(弹窗)配置============================= +#游戏类型 +TkA_Type= +#游戏题材 +TkA_Theme= +#适龄,取值:8|12|16|18 +TkA_Age= +#隐私政策url +TkA_Url_Privacy=https://manlemonzi.com/privacy.html +#用户协议url +TkA_Url_Agreement= +#数数上报地址 +ss_url=https://slax.manlemonzi.com +#中台域名 +zt_url= + +#=================广告通用配置============================= +#广告平台,max|topon|xiaomi +ad_platform=max + +#广告appid (包括max applovin.sdk.key) +ad_appid=h1gours48c2kom@7d3af77b0803cbc641888cb393e8652e +#广告appkey +ad_appkey=qQ7XVQbkl0J5pGUvq0ZdvhP9RtIwVA2m0SMT_HHzFkEwFdUCovsckr27CKGLamD04hzLWq0m5Iq50E39DkhumR +#admob id +admob_id=ca-app-pub-1392995944739082~2222357431 +#GoogleAnalytics跟踪ID +TRACKING_ID=504463995 +# +keystore=0 + +#游戏软著著作人 +copyright_holder= +#游戏软著登记号 +copyright_id= + + +#开屏广告位id +ad_splash_id=@disable +ad_native_splash_id= +#插屏广告位id +ad_interstital_id=@disable +#半屏插屏广告位id(小米广告区分全/半屏) +ad_interstital_half_id= +#激励视频广告位id +ad_reward_id=@disable +ad_reward_id_review= +#banner广告位id +ad_banner_id=@disable +ad_native_banner_id= +# 原生模板广告位id [增加] +ad_templete_natvie_id= + +# 原生自渲染广告位id [增加] +ad_render_native_id=@disable + + +#=================TW配置============================= +#[TODO][meta-data]百度 APPID +BaiduMobAd_APP_ID= + +#副包下载链接 +FB_DOWNLOAD_URL= +FB_POP_CONFIG_DAT_URL= +#更多游戏链接 +tka_url_moregame= + +#TW广告位 +#SDK插屏 +ad_sk_interstital_id= +#SDK开屏 +ad_sk_splash_id= +#SDK信息流 +ad_sk_native_id= +#SDK信息流1 +ad_sk_native1_id= + +#[TODO][meta-data]游戏主 Activity: +#取值 Unity游戏: com.u8.sdk.U8UnityContext +#flash游戏: com.u8.sdk.ane.U8ANEActivity +#Cocos游戏: com.u8.sdk.U8CocosActivity +MAIN_ACTIVITY=com.u8.sdk.U8UnityContext + +#极光 AppKey,默认空 +JPUSH_APPKEY= + + +#客服邮箱 +tkg_custom=Ngngocman2014@gmail.com +#ASN接口 +asn_url=https://satiszen.manlemonzi.com/where/most/low + +channel_appid= +channel_appkey= +channel_appsecret= + + +#=================Bugly============================= +Bugly_AppID= +Bugly_AppKey= + + +#=================YSDK实名认证============================= +#[TODO][ysdkconf.ini]腾讯AppID +OFFER_ID= + + +#=================Umeng配置============================= +#UM Appkey +UM_APP_KEY= +#json 参数 key +JSON_PARAM_KEY= +#[TODO][文件类型参数]默认 (在线) 参数配置 +UMENG_DEFAULT_ONLINE_CONFIG= + +#=================GA配置============================= +#GA AppKey +GA_KEY= +#GA AppSecret +GA_SECRETKEY= + +#=================热云配置============================= +#AppKey +RN_APP_KEY= + +#=================Tenjin配置============================= +#Tenjin ApiKey +TENJIN_API_KEY=PYOTVKJ4XZJHSMZW2V6GBQRCNXAFKWU2 + +# 数数appid +ss_app_id=0de04c9d796544bfa9a3ec9facce401a + +# 是否有登录系统 +has_user_system= + +# 微信appKey&appSecret +wechat_app_id= +wechat_app_secret= + +#==============亚马逊配置============ + +AmazonAppId= +AmazonMRECSlotID= +AmazonBannerSlotID= +AmazonLeaderSlotID= +AmazonInterSlotID= +AmazonVideoSlotID= + +# Topon插屏 +AD_Inter = n1gours4c244vg +# Topon激励视频 +AD_Reward = n1gours4cj2nr3 +# Admob聚合应用ID +Admob_APP_ID = ca-app-pub-1392995944739082~2222357431 +# Admob聚合插屏广告单元ID +Admob_IV_ID = ca-app-pub-1392995944739082/9004260342 +# Admob聚合激励广告单元ID +Admob_RV_ID = ca-app-pub-1392995944739082/2438851996 +# Admob聚合传统Banner广告单元ID +Admob_Banner_ID2 = ca-app-pub-1392995944739082/5232536293 +# Admob聚合信息流广告单元ID +Admob_NATIVE_ID = ca-app-pub-1392995944739082/2606372952 +# 全屏Native +Admob_FULL_NATIVE_ID = ca-app-pub-1392995944739082/2550548540 +# 小型广告 +ADMOB_SMALL_NATIVE_ID = ca-app-pub-1392995944739082/7667127940 +# pangle 聚合APP ID +Pangle_APP_ID = 8710327 +# pangle 插屏 +Pangle_IV_ID = 982328672 +# pangle 激励 +Pangle_RV_ID = 982328696 +#=========路由配置================= +# Debug IAP日志上报 +TF_IAP_REPORT_TMP=https://fds.fnpserver.com/hkoc/report/iaptm +# 用户删除 +TF_USER_DEL=https://fds.fnpserver.com/hkoc/user/delete +# 用户绑定 +TF_USER_BIND=https://fds.fnpserver.com/hkoc/user/bind +# 云存储保存 +TF_USER_PROGRESS_SAVE=https://fds.fnpserver.com/hkoc/thd/usprogress/save +# 用户更新 +TF_USER_UPDATE=https://fds.fnpserver.com/hkoc/user/update +# 积分上报 +TF_USER_SCORE_REPORT=https://fds.fnpserver.com/hkoc/user/score-report +# 敏感词审核 +TF_USER_CENSOR_TEXT=https://fds.fnpserver.com/hkoc/user/censor-text +# 用户登录 +TF_USER_LOGIN=https://fds.fnpserver.com/hkoc/user/login +# 用户详情 +TF_USER_DETAIL=https://fds.fnpserver.com/hkoc/user/detail +# 国内省份列表 +TF_USER_CN_PROVINCE_LIST=https://fds.fnpserver.com/hkoc/cn/app/provinces +# 排行榜用户 +TF_USER_RANKING_USER=https://fds.fnpserver.com/hkoc/user/ranking-user +# Google翻译 +TF_USER_GOOGLE_TRANSLATE=https://fds.fnpserver.com/hkoc/user/translate +# 归因数据中台 +TRACK_EVENT_LOG=https://pu.fnpserver.com/log/event +# IAP上报&支付二次认证 +TF_IAP_REPORT=https://fds.fnpserver.com/hkoc/report/iap +# 云存储详情 +TF_USER_PROGRESS_DETAIL=https://fds.fnpserver.com/hkoc/thd/usprogress/detail +# 国家列表 +TF_USER_COUNTRY_LIST=https://fds.fnpserver.com/hkoc/app/countries +# 排行榜区域 +TF_USER_RANKING_AREA=https://fds.fnpserver.com/hkoc/user/ranking-area \ No newline at end of file diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/tkg_config_mainly.properties b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/tkg_config_mainly.properties new file mode 100644 index 0000000..cf1fab1 --- /dev/null +++ b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/com.satiszen.tidy.asmr.zxffg.free.launcher_android/tkg_config_mainly.properties @@ -0,0 +1,124 @@ +#=================基础配置============================= +#游戏名称 +app_name=Satiszen Tidy ASMR Launcher +#包名 +package_name=com.satiszen.tidy.asmr.zxffg.free.launcher +#发行主体 +publish_account=GLC_004 +#渠道 +channel=GooglePlay +#隐私政策 +TkA_Url_Privacy=https://manlemonzi.com/privacy.html +#数数上报地址 +ss_url=https://slax.manlemonzi.com +#中台域名 +zt_url= + +#=========归因统计================= +#Adjust +adjust_id=sn8qbtk0tdz4 + +#GoogleAnalytics跟踪ID +TRACKING_ID=504463995 + +#=========广告配置================= +#广告平台,max|topon|xiaomi +ad_platform=max + +#广告appid (包括max applovin.sdk.key) +ad_appid=h1gours48c2kom@7d3af77b0803cbc641888cb393e8652e + +#广告appkey +ad_appkey=qQ7XVQbkl0J5pGUvq0ZdvhP9RtIwVA2m0SMT_HHzFkEwFdUCovsckr27CKGLamD04hzLWq0m5Iq50E39DkhumR + +#admob id +admob_id=ca-app-pub-1392995944739082~2222357431 + +#开屏广告位id +ad_splash_id=@disable +#插屏广告位id +ad_interstital_id=@disable +#激励视频广告位id +ad_reward_id=@disable +ad_reward_id_review= +#banner广告位id +ad_banner_id=@disable +# 原生模板广告位id +ad_templete_natvie_id= +# 原生自渲染广告位id +ad_render_native_id=@disable + +# 数数appid +ss_app_id=0de04c9d796544bfa9a3ec9facce401a + +# 是否有登录系统 +has_user_system= + +# 微信appKey&appSecret +wechat_app_id= +wechat_app_secret= + +#客服邮箱 +tkg_custom=Ngngocman2014@gmail.com +#ASN接口 +asn_url=https://satiszen.manlemonzi.com/where/most/low + +# Topon插屏 +AD_Inter = n1gours4c244vg +# Topon激励视频 +AD_Reward = n1gours4cj2nr3 +# Admob聚合应用ID +Admob_APP_ID = ca-app-pub-1392995944739082~2222357431 +# Admob聚合插屏广告单元ID +Admob_IV_ID = ca-app-pub-1392995944739082/9004260342 +# Admob聚合激励广告单元ID +Admob_RV_ID = ca-app-pub-1392995944739082/2438851996 +# Admob聚合传统Banner广告单元ID +Admob_Banner_ID2 = ca-app-pub-1392995944739082/5232536293 +# Admob聚合信息流广告单元ID +Admob_NATIVE_ID = ca-app-pub-1392995944739082/2606372952 +# 全屏Native +Admob_FULL_NATIVE_ID = ca-app-pub-1392995944739082/2550548540 +# 小型广告 +ADMOB_SMALL_NATIVE_ID = ca-app-pub-1392995944739082/7667127940 +# pangle 聚合APP ID +Pangle_APP_ID = 8710327 +# pangle 插屏 +Pangle_IV_ID = 982328672 +# pangle 激励 +Pangle_RV_ID = 982328696 +#=========路由配置================= +# Debug IAP日志上报 +TF_IAP_REPORT_TMP=https://fds.fnpserver.com/hkoc/report/iaptm +# 用户删除 +TF_USER_DEL=https://fds.fnpserver.com/hkoc/user/delete +# 用户绑定 +TF_USER_BIND=https://fds.fnpserver.com/hkoc/user/bind +# 云存储保存 +TF_USER_PROGRESS_SAVE=https://fds.fnpserver.com/hkoc/thd/usprogress/save +# 用户更新 +TF_USER_UPDATE=https://fds.fnpserver.com/hkoc/user/update +# 积分上报 +TF_USER_SCORE_REPORT=https://fds.fnpserver.com/hkoc/user/score-report +# 敏感词审核 +TF_USER_CENSOR_TEXT=https://fds.fnpserver.com/hkoc/user/censor-text +# 用户登录 +TF_USER_LOGIN=https://fds.fnpserver.com/hkoc/user/login +# 用户详情 +TF_USER_DETAIL=https://fds.fnpserver.com/hkoc/user/detail +# 国内省份列表 +TF_USER_CN_PROVINCE_LIST=https://fds.fnpserver.com/hkoc/cn/app/provinces +# 排行榜用户 +TF_USER_RANKING_USER=https://fds.fnpserver.com/hkoc/user/ranking-user +# Google翻译 +TF_USER_GOOGLE_TRANSLATE=https://fds.fnpserver.com/hkoc/user/translate +# 归因数据中台 +TRACK_EVENT_LOG=https://pu.fnpserver.com/log/event +# IAP上报&支付二次认证 +TF_IAP_REPORT=https://fds.fnpserver.com/hkoc/report/iap +# 云存储详情 +TF_USER_PROGRESS_DETAIL=https://fds.fnpserver.com/hkoc/thd/usprogress/detail +# 国家列表 +TF_USER_COUNTRY_LIST=https://fds.fnpserver.com/hkoc/app/countries +# 排行榜区域 +TF_USER_RANKING_AREA=https://fds.fnpserver.com/hkoc/user/ranking-area \ No newline at end of file diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/drawable-xxhdpi.zip b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/drawable-xxhdpi.zip new file mode 100644 index 0000000..cb3a0f1 Binary files /dev/null and b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/drawable-xxhdpi.zip differ diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/icon.zip b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/icon.zip new file mode 100644 index 0000000..7d39193 Binary files /dev/null and b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/icon.zip differ diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/satiszen.keystore b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/satiszen.keystore new file mode 100644 index 0000000..64ca977 Binary files /dev/null and b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/satiszen.keystore differ diff --git a/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/unityLibrary.zip b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/unityLibrary.zip new file mode 100644 index 0000000..f9bbcaa Binary files /dev/null and b/game_config/com.satiszen.tidy.asmr.zxffg.free.launcher/unityLibrary.zip differ diff --git a/scripts/build.py b/scripts/build.py index 2b847cb..05579c5 100644 --- a/scripts/build.py +++ b/scripts/build.py @@ -1,13 +1,15 @@ -from .context import Context -from .project_build import ProjectBuild -from .project_copy import ProjectCopy -from .project_end import ProjectEnd -from .project_init import ProjectInit -from .project_proguard import ProjectProguard -from .project_update import ProjectUpdate -from .project_upload import ProjectUpload - from utils.logger_utils import app_logger +from context import Context +from project_build import ProjectBuild +from project_copy import ProjectCopy +from project_end import ProjectEnd +from project_init import ProjectInit +from project_interface import ProjectInterface +from project_proguard import ProjectProguard +from project_res_md5 import ProjectResMd5 +from project_res_string import ProjectResString +from project_update import ProjectUpdate +from project_upload import ProjectUpload def run(context: Context): @@ -15,7 +17,10 @@ def run(context: Context): tasks = [ ProjectInit(context), ProjectCopy(context), + ProjectResMd5(context), ProjectUpdate(context), + ProjectResString(context), + ProjectInterface(context), ProjectProguard(context), ProjectBuild(context), ProjectUpload(context), diff --git a/scripts/context.py b/scripts/context.py index eea0b63..21c346f 100644 --- a/scripts/context.py +++ b/scripts/context.py @@ -11,6 +11,10 @@ class Context: game_type: str = "" + proguard_key = {} + app_name: str = "" + + original_package: str = "com.drop.meme.merge.game.fsaew.puzzle" project_original_path: str = "project/original" temp_project_path: str = "" @@ -36,7 +40,9 @@ class Context: out_release_apk: str = "" out_release_aab: str = "" - proguard_dict: dict = None + proguard_dict = {} + + string: dict = None @classmethod def from_json(cls, json_str: str): @@ -49,4 +55,6 @@ class Context: return self.config.get(key, default_value).replace(" ", " ") def get_app_name(self): + if self.app_name: + return self.app_name return self.get_config("app_name") diff --git a/scripts/project_copy.py b/scripts/project_copy.py index dc1e77a..7e4f43f 100644 --- a/scripts/project_copy.py +++ b/scripts/project_copy.py @@ -1,5 +1,5 @@ from scripts.task import Task -from utils import FileUtils, TimeUtils +from utils import FileUtils from utils.logger_utils import app_logger @@ -12,8 +12,6 @@ class ProjectCopy(Task): pass def init(self): - self.context.temp_project_path = self.context.project_original_path.replace( - "original", self.context.package_name.replace(".", "_") + TimeUtils.get_formatted_time(format_str="%H%M%S") - ) + self.context.temp_project_path = self.context.project_original_path pass diff --git a/scripts/project_interface.py b/scripts/project_interface.py new file mode 100644 index 0000000..1650ba9 --- /dev/null +++ b/scripts/project_interface.py @@ -0,0 +1,127 @@ +from scripts.task import Task +import re +import os +import hashlib + +from utils import FileUtils + + +def string_to_md5(text): + # 将字符串编码为UTF-8字节 + text_bytes = text.encode('utf-8') + # 创建MD5哈希对象并更新字节数据 + md5_hash = hashlib.md5(text_bytes) + # 返回十六进制哈希字符串 + return md5_hash.hexdigest() + + +class ProjectInterface(Task): + def __init__(self, context): + super().__init__(context) + self.target_code_package_name = "" + self.unity_proxy_api_file = "" + self.i_android_callback_unity_file = "" + self.target_unity_proxy_api_file = "" + self.target_i_android_callback_unity_file = "" + + def generate_encryption_key(self, key: str, s_len: int = -1) -> str: + # if game_editor == "Cocos": + # return key + handle_key = self.context.package_name + key + self.context.package_name + processed_key = string_to_md5(handle_key) + while processed_key[0].isdigit(): + processed_key = processed_key[1:] # 移除首字符 + + # 计算目标长度 + if s_len > 0: + target_length = s_len + else: + target_length = len(key) + + # 取前N位(根据原始key长度),不足则全部保留 + # 如果处理后的key为空(极小概率),则返回空字符串 + proguard_value = processed_key[:target_length] if processed_key else "" + self.context.proguard_key[key] = proguard_value + return proguard_value + + def handle_common_proguard_game_mapping(self, path: str): + + pattern = re.compile(r'const val (\w+) = "([^"]+)"') + lines = open(path, 'r', encoding='utf-8').readlines() + with (open(path, 'w', encoding='utf-8') as f_out): + for line in lines: + match = pattern.match(line.strip()) + # print(line, match) + if match: + # 提取变量名和原始值 + var_name, original_value = match.groups() + + # 生成MD5并替换 + encrypted_value = self.generate_encryption_key(original_value) + new_line = f'const val {var_name} = "{encrypted_value}"\n' + f_out.write(new_line) + else: + # 保留非匹配行 + f_out.write(line) + + def execute(self): + + self.unity_proxy_api_file = os.path.join(self.context.temp_project_path, + "launcher-game/src/com/game/hachisdk/unity/UnityProxyApi.java".replace( + "/", os.sep)) + self.i_android_callback_unity_file = os.path.join(self.context.temp_project_path, + "launcher-game/src/com/game/hachisdk/unity/IAndroidCallbackUnity.java".replace( + "/", os.sep)) + self.target_code_package_name = self.context.package_name + "." + self.generate_encryption_key( + self.context.package_name, len(self.context.package_name.split('.')[-1])) + + self.handle_common_proguard_game_mapping( + os.path.join(self.context.temp_project_path, + "launcher-game/src/com/game/hachisdk/game/ApiKeys.kt".replace("/", os.sep))) + self.handle_common_proguard_game_mapping( + os.path.join(self.context.temp_project_path, + "launcher-game/src/com/game/hachisdk/game/RespKeys.kt".replace("/", os.sep))) + self.handle_common_proguard_game_mapping( + os.path.join(self.context.temp_project_path, + "launcher-game/src/com/game/launcher/GLMaping.kt".replace("/", os.sep))) + + target_unity_proxy_api_class = self.target_code_package_name + "." + self.generate_encryption_key( + "UnityProxyApi") + target_android_callback_unity_class = self.target_code_package_name + "." + self.generate_encryption_key( + "IAndroidCallbackUnity") + + self.target_unity_proxy_api_file = os.path.join(self.context.temp_project_path, "launcher-game", "src", + target_unity_proxy_api_class.replace(".", os.sep) + ".java") + FileUtils.move(self.unity_proxy_api_file, self.target_unity_proxy_api_file) + + self.target_i_android_callback_unity_file = os.path.join(self.context.temp_project_path, "launcher-game", "src", + target_android_callback_unity_class.replace(".", + os.sep) + ".java") + FileUtils.move(self.i_android_callback_unity_file, self.target_i_android_callback_unity_file) + + text = open(self.target_unity_proxy_api_file, "r", encoding="utf-8").read() + text = text.replace("com.game.hachisdk.unity", self.target_code_package_name) + text = text.replace("UnityProxyApi", self.generate_encryption_key("UnityProxyApi")) + text = text.replace("proxyApi", self.generate_encryption_key("proxyApi")) + text = text.replace("initCallback", self.generate_encryption_key("initCallback")) + text = text.replace("IAndroidCallbackUnity", self.generate_encryption_key("IAndroidCallbackUnity")) + text = text.replace("callback", self.generate_encryption_key("callback")) + open(self.target_unity_proxy_api_file, "w", encoding="utf-8").write(text) + + text = open(self.target_i_android_callback_unity_file, "r", encoding="utf-8").read() + text = text.replace("com.game.hachisdk.unity", self.target_code_package_name) + text = text.replace("IAndroidCallbackUnity", self.generate_encryption_key("IAndroidCallbackUnity")) + text = text.replace("callback", self.generate_encryption_key("callback")) + open(self.target_i_android_callback_unity_file, "w", encoding="utf-8").write(text) + + proxy_api = self.generate_encryption_key("proxyApi") + init_callback = self.generate_encryption_key("initCallback") + callback = self.generate_encryption_key("callback") + + print("target_unity_proxy_api_class", target_unity_proxy_api_class) + print("target_android_callback_unity_class", target_android_callback_unity_class) + print("proxy_api", proxy_api) + print("init_callback", init_callback) + print("callback", callback) + + pass diff --git a/scripts/project_proguard.py b/scripts/project_proguard.py index cfeef13..2c824af 100644 --- a/scripts/project_proguard.py +++ b/scripts/project_proguard.py @@ -1,11 +1,125 @@ +import binascii import hashlib +import json import os -from pathlib import Path import re +import xml.etree.ElementTree as ET +from pathlib import Path + +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad from scripts.context import Context from scripts.task import Task from utils import FileUtils +from utils.logger_utils import app_logger + + +def encrypt_content(key: str, content: str) -> str: + """ + 加密内容,与Kotlin版本算法保持一致 + 使用AES/ECB/PKCS5Padding模式,MD5生成密钥 + """ + if not key: + raise ValueError("Key cannot be null or empty.") + if not content: + raise ValueError("Content cannot be null or empty.") + + # 生成密钥的MD5哈希 + key_bytes = generate_key_hash(key) + + # 将内容转换为UTF-8字节 + content_bytes = content.encode('utf-8') + + # 初始化AES加密器,使用ECB模式和PKCS5填充 + cipher = AES.new(key_bytes, AES.MODE_ECB) + + # 对内容进行填充并加密 + padded_content = pad(content_bytes, AES.block_size) + encrypted_bytes = cipher.encrypt(padded_content) + + # 将加密后的字节转换为小写十六进制字符串 + return binascii.hexlify(encrypted_bytes).decode().lower() + + +def generate_key_hash(key: str) -> bytes: + """生成密钥的MD5哈希,返回16字节的密钥""" + md5 = hashlib.md5() + md5.update(key.encode('utf-8')) + return md5.digest() + + +def simple_encrypt(text, key): + return encrypt_content(key, text) + + +def encrypt_xml_resources(file_path, backup=True, key=""): + """读取XML资源文件,加密所有string内容,然后写回""" + try: + # 创建备份文件 + if backup and os.path.exists(file_path): + backup_path = f"{file_path}.bak" + with open(file_path, 'r', encoding='utf-8') as f_in, \ + open(backup_path, 'w', encoding='utf-8') as f_out: + f_out.write(f_in.read()) + print(f"已创建备份文件: {backup_path}") + + # 解析XML文件 + tree = ET.parse(file_path) + root = tree.getroot() + + # 遍历所有string元素并加密内容 + for string_elem in root.findall('string'): + original_text = string_elem.text.replace("\\'", "'") + if original_text is not None: + # 加密文本 + encrypted_text = simple_encrypt(original_text, key) + # 更新元素内容 + string_elem.text = encrypted_text + print(f"加密: {original_text} -> {encrypted_text}") + + # 写回加密后的内容 + tree.write(file_path, encoding='utf-8', xml_declaration=True) + print(f"加密完成,已更新文件: {file_path}") + + except Exception as e: + print(f"处理文件时出错: {str(e)}") + + +def get_all_string_names(xml_file): + # 解析XML文件 + tree = ET.parse(xml_file) + root = tree.getroot() + + # 存储所有name属性值 + string_names = [] + + # 遍历所有string标签 + for string_elem in root.findall('string'): + # 获取name属性值 + name = string_elem.get('name') + if name: + string_names.append(name) + + return string_names + + +def get_all_style_names(xml_file): + # 解析XML文件 + tree = ET.parse(xml_file) + root = tree.getroot() + + # 存储所有name属性值 + string_names = [] + + # 遍历所有string标签 + for string_elem in root.findall('style'): + # 获取name属性值 + name = string_elem.get('name') + if name: + string_names.append(name) + + return string_names def extract_launcher_ids(xml_content): @@ -17,12 +131,6 @@ def extract_launcher_ids(xml_content): return matches -# def extract_launcher_ids(xml_content): -# """提取所有 android:id 值""" -# pattern = r'android:id\s*=\s*"@\+id/([^"]+)"' -# return re.findall(pattern, xml_content) - - def string_to_md5(text): # 将字符串编码为UTF-8字节 text_bytes = text.encode('utf-8') @@ -51,31 +159,20 @@ def generate_encryption_key(key: str, s_len: int = -1, target_package_name: str return processed_key[:target_length] if processed_key else "" -layout_path = "LauncherCode/res/layout".replace("/", os.sep) -values_path = "LauncherCode/res/values".replace("/", os.sep) -drawable_xxhdpi_path = "LauncherCode/res/drawable-xxhdpi".replace("/", os.sep) -drawable_path = "LauncherCode/res/drawable".replace("/", os.sep) -code_path = "LauncherCode/src".replace("/", os.sep) - -android_manifest_path = "lawnchair/AndroidManifest.xml".replace("/", os.sep) -xml_path = "lawnchair/res/xml".replace("/", os.sep) -launcher_code_path = "lawnchair/src".replace("/", os.sep) -src_code_path = "src".replace("/", os.sep) -launchercode = "launchercode" - -lawn_layout = "res/layout".replace("/", os.sep) - -qucikset_manifest = "quickstep/AndroidManifest-launcher.xml".replace("/", os.sep) -lawn_manifest = "AndroidManifest.xml".replace("/", os.sep) - -pag_file = "lawnchair/assets/pag_wallpaper_slide.pag".replace("/", os.sep) - - class ProjectProguard(Task): def __init__(self, context: Context): super().__init__(context) - self.context.proguard_dict = { - launchercode: generate_encryption_key(launchercode, target_package_name=self.context.package_name)} + self.root = self.context.temp_project_path + self.module_path = os.path.join(self.root, "launcher-game") + self.code_path = os.path.join(self.module_path, "src") + self.res_path = os.path.join(self.module_path, "res") + self.drawable_path = os.path.join(self.res_path, "drawable") + self.drawable_xxhdpi_path = os.path.join(self.res_path, "drawable-xxhdpi") + self.layout_path = os.path.join(self.res_path, "layout") + self.string_path = "" + self.launcher_xml = "" + self.launcher_java = "" + self.style_path = "" def add_proguard_key(self, key: str) -> str: value = self.context.proguard_dict.get(key) @@ -85,44 +182,6 @@ class ProjectProguard(Task): self.context.proguard_dict[key] = value return value - def rename_files_in_dir(self, dir_path: str): - for root, dirs, files in os.walk(dir_path): - for file in files: - file_path = os.path.join(root, file) - name = Path(file).stem - add_proguard_key = self.add_proguard_key(name) - FileUtils.move(file_path, - os.path.join(root, file.replace(name, add_proguard_key)) - .replace(launchercode, self.context.proguard_dict.get(launchercode)), - overwrite=True) - - def update(self, file_path: str): - text = open(file_path, "r", encoding="UTF-8").read() - for key, value in self.context.proguard_dict.items(): - text = text.replace(key, value) - pass - open(file_path, "w", encoding="UTF-8").write(text) - - def update_proguard(self, dir_path: str): - if os.path.isdir(dir_path): - for root, dirs, files in os.walk(dir_path): - for file in files: - if file.endswith(".xml") or file.endswith(".java") or file.endswith(".kt"): - file_path = os.path.join(root, file) - self.update(file_path) - else: - self.update(dir_path) - pass - - def update_id(self, file_path: str): - for root, dirs, files in os.walk(file_path): - for file in files: - xml_file = os.path.join(root, file) - text = open(xml_file, "r", encoding="UTF-8").read() - ids = extract_launcher_ids(text) - for id in ids: - self.add_proguard_key(id) - def write_proguard(self): file_path = os.path.join(self.context.temp_project_path, "proguard.pro") lines = open(file_path, "r", encoding="UTF-8").readlines() @@ -136,27 +195,111 @@ class ProjectProguard(Task): open(file_path, "w", encoding="UTF-8").writelines(lines) pass + def proguard_code(self): + + code_package_name_list = ["com.game.launcher.activity", "com.game.launcher.view", "com.game.launcher.service"] + for code_package in code_package_name_list: + code_dir = os.path.join(self.code_path, code_package.replace(".", os.sep)) + files = os.listdir(code_dir) + self.context.proguard_dict[code_package] = self.context.package_name + for file in files: + file_path = Path(file) + file_name = file_path.stem + file_ext = file_path.suffix + target_class_name = self.add_proguard_key(file_name) + + target_file_path = os.path.join(self.code_path, self.context.package_name.replace(".", os.sep), + target_class_name + file_ext) + + o = os.path.join(code_dir, file) + + self.context.proguard_dict[ + code_package + "." + file_name] = self.context.package_name + "." + target_class_name + FileUtils.move(o, target_file_path) + + pass + + pass + + def proguard_pag(self): + pag_file = os.path.join(self.module_path, "assets/pag_gl_slide.pag".replace("/", os.sep)) + target_pag = self.add_proguard_key("pag_gl_slide") + FileUtils.move(pag_file, pag_file.replace("pag_gl_slide", target_pag)) + pass + + def proguard_file_name(self, dir_path: str): + for file in os.listdir(dir_path): + path = Path(file) + file_name = path.stem + target_file_name = self.add_proguard_key(file_name) + abspath = os.path.join(dir_path, file) + FileUtils.move(abspath, abspath.replace(file_name, target_file_name)) + pass + + def analysis_id_dir(self, dir_path: str): + for file in os.listdir(dir_path): + file = os.path.join(dir_path, file) + self.analysis_id_file(file) + pass + + def analysis_id_file(self, path: str): + ids = extract_launcher_ids(open(path, "r", encoding="UTF-8").read()) + for id in ids: + self.add_proguard_key(id) + pass + + def analysis_string_name(self, file_path: str): + names = get_all_string_names(file_path) + for name in names: + self.add_proguard_key(name) + pass + + def analysis_style_name(self, file_path: str): + names = get_all_style_names(file_path) + for name in names: + self.add_proguard_key(name) + pass + + def update_proguard_file(self, file_path: str): + if not (file_path.endswith(".java") or file_path.endswith(".xml") or file_path.endswith(".kt")): + return + text = open(file_path, "r", encoding="UTF-8").read() + for key, value in self.context.proguard_dict.items(): + text = text.replace(key, value) + open(file_path, "w", encoding="UTF-8").writelines(text) + + def update_proguard_dir(self, dir_path: str): + for root, dirs, files in os.walk(dir_path): + for file in files: + file_path = os.path.join(root, file) + self.update_proguard_file(file_path) + pass + def execute(self): + self.root = self.context.temp_project_path + self.module_path = os.path.join(self.root, "launcher-game") + self.code_path = os.path.join(self.module_path, "src") + self.res_path = os.path.join(self.module_path, "res") + self.drawable_path = os.path.join(self.res_path, "drawable") + self.drawable_xxhdpi_path = os.path.join(self.res_path, "drawable-xxhdpi") + self.layout_path = os.path.join(self.res_path, "layout") + self.string_path = os.path.join(self.res_path, "values", "strings.xml") + self.style_path = os.path.join(self.res_path, "values", "styles.xml") + self.launcher_xml = os.path.join(self.root, "res/layout/launcher.xml".replace("/", os.sep)) + self.launcher_java = os.path.join(self.root, "src/com/android/launcher3/Launcher.java".replace("/", os.sep)) self.write_proguard() - self.add_proguard_key("LauncherMyNoActionBar") - self.add_proguard_key("LauncherIntroTheme") - self.add_proguard_key("LauncherGameIntroTheme") - self.add_proguard_key("LauncherTransparentTheme") + self.proguard_code() + self.proguard_pag() + self.proguard_file_name(self.drawable_path) + self.proguard_file_name(self.drawable_xxhdpi_path) + self.proguard_file_name(self.layout_path) - self.add_proguard_key("launchergamead") - self.add_proguard_key("launcher_help_detail") - self.add_proguard_key("launcher_help") - self.add_proguard_key("launcher_uninstall") - self.add_proguard_key("launcher_onboard") - self.add_proguard_key("pag_wallpaper_slide") + self.analysis_id_file(self.launcher_xml) + self.analysis_id_dir(self.layout_path) + self.analysis_string_name(self.string_path) + self.analysis_style_name(self.style_path) - self.update_id(os.path.join(self.context.temp_project_path, lawn_layout)) - self.update_id(os.path.join(self.context.temp_project_path, layout_path)) - - self.rename_files_in_dir(os.path.join(self.context.temp_project_path, layout_path)) - self.rename_files_in_dir(os.path.join(self.context.temp_project_path, drawable_xxhdpi_path)) - self.rename_files_in_dir(os.path.join(self.context.temp_project_path, drawable_path)) - self.rename_files_in_dir(os.path.join(self.context.temp_project_path, code_path)) + self.add_proguard_key("gltaskaffinity") self.context.proguard_dict = { k: v for k, v in sorted( @@ -165,32 +308,29 @@ class ProjectProguard(Task): reverse=True ) } - self.update_proguard(os.path.join(self.context.temp_project_path, layout_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, values_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, drawable_xxhdpi_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, drawable_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, code_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, android_manifest_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, xml_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, launcher_code_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, src_code_path)) - self.update_proguard(os.path.join(self.context.temp_project_path, qucikset_manifest)) - self.update_proguard(os.path.join(self.context.temp_project_path, lawn_manifest)) - self.update_proguard(os.path.join(self.context.temp_project_path, lawn_layout)) + self.update_proguard_file(os.path.join(self.context.temp_project_path, + "src/com/android/launcher3/views/OptionsPopupView.java".replace("/", + os.sep))) + self.update_proguard_file(self.launcher_xml) + self.update_proguard_file(self.launcher_java) + self.update_proguard_file(self.string_path) - target_pag_file = os.path.join(self.context.temp_project_path, pag_file) - FileUtils.move(target_pag_file, - target_pag_file.replace("pag_wallpaper_slide", - self.context.proguard_dict.get("pag_wallpaper_slide"))) - pass + self.update_proguard_dir(self.layout_path) + self.update_proguard_dir(self.drawable_xxhdpi_path) + self.update_proguard_dir(self.drawable_path) + self.update_proguard_dir(self.module_path) + self.update_proguard_dir(os.path.join(self.context.temp_project_path, "lawnchair/res/xml")) + encrypt_xml_resources(self.string_path, False, string_to_md5(self.context.package_name).upper()) -if __name__ == "__main__": - file = "../project/com_punch_prankster_puzzle_fwaes_free_launcher_fgsaw223908/LauncherCode/res/layout/a60034437eae19e7b00.xml".replace( - "/", os.sep) - text = open(file, "r", encoding="UTF-8").read() - print(text) - temp = extract_launcher_ids(text) - print(temp) - pass + app_logger().info(json.dumps(self.context.proguard_dict, indent=4)) + +# if __name__ == '__main__': +# encrypt_xml_resources( +# "/Users/luojian/Documents/project/zicp/Lawnchair_DollMasterLauncher/launcher-game/res/values/strings.xml") +# # key = string_to_md5("com.drop.meme.merge.game.fsaew.puzzle").upper() +# # print(key) +# # result = encrypt_content(key, "hello World") +# # print(result) +# pass diff --git a/scripts/project_res_md5.py b/scripts/project_res_md5.py new file mode 100644 index 0000000..492a431 --- /dev/null +++ b/scripts/project_res_md5.py @@ -0,0 +1,80 @@ +from scripts.task import Task +import os +import hashlib +from PIL import Image +import random + + +def get_md5(file_path): + """计算文件的MD5值""" + hash_md5 = hashlib.md5() + with open(file_path, "rb") as f: + for chunk in iter(lambda: f.read(4096), b""): + hash_md5.update(chunk) + return hash_md5.hexdigest() + + +def modify_one_pixel(input_path, output_path): + """随机修改图片中一个不显眼的像素,每次执行结果不同""" + try: + with Image.open(input_path) as img: + width, height = img.size + + # 随机选择一个像素位置(避开边缘以防某些特殊图片格式问题) + x = random.randint(1, width - 2) + y = random.randint(1, height - 2) + + # 获取该位置的像素值 + pixel = img.getpixel((x, y)) + + # 随机决定是增加还是减少像素值 + change = random.choice([-1, 1]) + + # 根据图像模式处理像素值 + if img.mode in ['RGB', 'RGBA']: + new_pixel = list(pixel) + # 随机选择一个颜色通道进行修改 + channel = random.randint(0, len(new_pixel) - 1) + new_pixel[channel] = (new_pixel[channel] + change) % 256 + new_pixel = tuple(new_pixel) + elif img.mode == 'L': # 灰度图 + new_pixel = (pixel + change) % 256 + else: + # 其他模式处理 + if isinstance(pixel, int): + new_pixel = (pixel + change) % 256 + else: + # 对多通道非RGB模式,随机选择一个通道修改 + new_pixel = list(pixel) + channel = random.randint(0, len(new_pixel) - 1) + new_pixel[channel] = (new_pixel[channel] + change) % 256 + new_pixel = tuple(new_pixel) + + # 设置新的像素值 + img.putpixel((x, y), new_pixel) + + # 保存修改后的图片 + img.save(output_path) + return True + except Exception as e: + print(f"处理图片时出错: {e}") + return False + + +class ProjectResMd5(Task): + + def execute(self): + path = f"launcher-game/res/" + root_path = os.path.join(self.context.temp_project_path, path) + for i in os.listdir(root_path): + if i.startswith("drawable"): + path = os.path.join(root_path, i) + for file in os.listdir(path): + if file.endswith(".png") or file.endswith(".jpg"): + file_path = os.path.join(path, file) + md51 = get_md5(file_path) + modify_one_pixel(file_path, file_path) + md52 = get_md5(file_path) + print(file_path, md51, md52) + + pass diff --git a/scripts/project_res_string.py b/scripts/project_res_string.py new file mode 100644 index 0000000..19a4378 --- /dev/null +++ b/scripts/project_res_string.py @@ -0,0 +1,49 @@ +import json +import os.path +import xml.etree.ElementTree as ET + +from scripts.task import Task +from utils.logger_utils import app_logger + + +def batch_update_xml_resources(file_path, updates_dict): + # 解析XML文件 + tree = ET.parse(file_path) + root = tree.getroot() + updated_count = 0 # 遍历字典中的每个key-value对 + for key, new_value in updates_dict.items(): + # 查找指定key的元素 + for elem in root.findall(f".//string[@name='{key}']"): + # 修改元素内容 + elem.text = new_value.replace("'", "\\'") + print(f"已更新 key: {key} 的值为: {elem.text}") + updated_count += 1 + break + else: + print(f"未找到 key: {key}") + + # 美化并保存修改 + tree.write(file_path, encoding='utf-8', xml_declaration=True) + return updated_count + + +class ProjectResString(Task): + + def update_res(self, string_path: str, res: dict[str, str]): + if os.path.exists(string_path): + batch_update_xml_resources(string_path, res) + return + + app_logger().debug("路径不存,不操作了,后续可以给他创建出来:" + string_path + "\t" + json.dumps(res, indent=4)) + + def execute(self): + for key in self.context.string.keys(): + launcher = key.replace('base', '') + if launcher: + launcher = "values-" + launcher + else: + launcher = "values" + + path = f"launcher-game/res/{launcher}/strings.xml" + self.update_res(os.path.join(self.context.temp_project_path, path), self.context.string[key]) + pass diff --git a/scripts/project_update.py b/scripts/project_update.py index a47521d..77a2038 100644 --- a/scripts/project_update.py +++ b/scripts/project_update.py @@ -241,8 +241,12 @@ storePassword=123456 app_logger().debug(f"{target_path} -> {dst} , 解压结果: {result}") mainly_path = os.path.join(dst, "mainly") + if not os.path.exists(mainly_path): + mainly_path = os.path.join(dst, "appConfig") google_services_json_path = os.path.join(dst, "google-services.json") + if not os.path.exists(google_services_json_path): + google_services_json_path = os.path.join(dst, "appConfig", "google-services.json") FileUtils.copy(google_services_json_path, os.path.join(self.context.temp_project_path, "google-services.json"), @@ -258,7 +262,7 @@ storePassword=123456 for file in list(filter(lambda f: f.find(".") <= 0, os.listdir(mainly_path))): FileUtils.copy(os.path.join(mainly_path, file), os.path.join(dst_path, file)) - with open(os.path.join(mainly_path, "tkg_config_mainly.properties"), 'rb') as f: + with open(os.path.join(dst, "tkg_config_mainly.properties"), 'rb') as f: self.context.config = javaproperties.load(f) # 不打admob