如何更改 Android 应用中的默认活动?
Posted
技术标签:
【中文标题】如何更改 Android 应用中的默认活动?【英文标题】:How to change default activity in Android app? 【发布时间】:2021-11-13 14:10:38 【问题描述】:几个月前我曾经使用这个apk进行学习,最近几天我尝试再次使用它,但自从我上次使用它后,应用程序登录系统坏了。 它使用了用于排行榜和 1vs1 测验的登录页面,但我不需要这些功能,我只需要学习环境。
但是为了进入学习环境,你必须登录,而且由于登录不再起作用,我决定自己动手编辑应用程序以绕过登录页面,我已经做了研究,今天掉进兔子洞8小时,现在终于放弃了。
这是 androidManifest.xml 代码的一部分:
<application android:allowBackup="true" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_app" android:label="@string/app_name" android:name="ro.umfquiz.umfquiz.presentation.UMFQuizApp" android:supportsRtl="true" android:theme="@style/AppTheme">
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="@string/admob_app_id"/>
<activity android:name="ro.umfquiz.umfquiz.presentation.login.AuthenticationActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden|adjustPan"/>
<activity android:name="ro.umfquiz.umfquiz.presentation.login.FirstActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden"/>
<activity android:name="ro.umfquiz.umfquiz.presentation.login.RegisterActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden"/>
<activity android:name="ro.umfquiz.umfquiz.presentation.login.LoginActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden"/>
<activity android:label="@string/app_name" android:name="ro.umfquiz.umfquiz.presentation.main.MainActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="ro.umfquiz.umfquiz.presentation.ModeSelectionActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden"/>
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize" android:label="@string/app_name" android:name="com.facebook.FacebookActivity" android:theme="@style/com_facebook_activity_theme"/>
<activity android:exported="true" android:name="com.facebook.CustomTabActivity" android:screenOrientation="portrait">
<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="@string/fb_login_protocol_scheme"/>
</intent-filter>
</activity>
<activity android:label="@string/training_mode" android:name="ro.umfquiz.umfquiz.presentation.testselection.training.TrainingSelectActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden"/>
<activity android:label="@string/exam_mode" android:name="ro.umfquiz.umfquiz.presentation.testselection.exam.ExamSelectActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden"/>
<activity android:label="@string/title_activity_quiz" android:name="ro.umfquiz.umfquiz.presentation.quiz.types.exam.QuizExamActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden"/>
我使用了一个 3rd 方应用程序来查找登录页面的名称,名称是“ro.umfquiz.umfquiz.presentation.login.AuthenticationActivity”。 我了解到具有 action.MAIN 和 category.LAUNCHER 的意图过滤器的活动是默认启动的活动,我尝试将该意图过滤器标签移至 MainActivity,然后移至 ModeSelectionActivity、FirstActivity 等,但都没有工作,我仍然登陆登录页面。移动意图标签后,我总是重新编译签名并重新安装 apk,并确保更改已保存。
我还尝试在很多与登录相关的活动中使用 android:enabled="false",但该版本无法签名.. idk?
所以请帮助我,我真的需要这个应用程序才能工作。这是apk,如果您不信任我,可以检查它是否有病毒,但我保证这是安全的。
我使用的工具有:apktool、MT Manager、apk-signer、Current Activity、Notepad ++。
apk 链接:Google Drive
【问题讨论】:
嗨@Panda,你有源代码吗?提供的APK文件没有源代码没有多大用处。 没有..我只有apk 那么没有源代码就不能绕过登录页面?我在 ytb 上看到很多人在这样做,他们只是在拖钓吗? 【参考方案1】:要更改默认活动,您只需移动显示的代码
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
到您想要的活动。现在,应用程序是否会在您这样做之后运行 - 这取决于它是否需要来自该登录服务器的数据,以及如果它无法访问他们的服务器,它是否进行了防御性编码以不崩溃。当它尝试从服务器访问所需的数据时,它很可能会立即或在一段时间后崩溃。但是你也许可以在没有它的情况下使用某些应用程序,这取决于他们如何编码以及应用程序如何工作的许多因素。
【讨论】:
登录屏幕的名称为 AuthenticationActivity,如您所见,在默认清单中,这些意图标签不在 AuthenticationActivity 上,它们在 MainActivity 上,但仍会自动打开到 AuthenticationActivity... @PandaYTCANALVECHI 然后在 MainActivity 中有代码,如果你没有登录,它会启动 AuthenticationActivity。这很常见,所以如果由于某种原因应用程序从内部活动重新启动并且你没有登录在,它会强制你登录。解决这个问题的唯一方法是实际编辑代码,而不仅仅是清单。这使得应用程序更有可能在没有登录的情况下崩溃,他们在假设您必须登录的情况下编写它。 是的..我玩过清单,现在它打开登录屏幕半秒钟,然后它迫使我重新登录。有没有办法可以删除这个转发或idk 我在 .dex 文件中找到了一个函数 isLoggedIn 并将其更改为始终返回 1,现在我绕过了登录屏幕 您已经尽了最大努力 - 如果按钮不工作或崩溃,他们正在尝试使用您没有的数据。更进一步将是手动修补每次崩溃的问题,以要么不发出导致崩溃的调用,要么伪造数据。【参考方案2】:在AndroidManifest.xml
文件中:
<activity android:name=".Your_Activity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
【讨论】:
以上是关于如何更改 Android 应用中的默认活动?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 android studio 中的 listview 项目点击更改活动图像和文本? java 或 kotlin