Русский / Russian English / Английский

Сейчас на форуме: minaevmaksimik (+5 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Основной форум —› Android: как создавать инстанс своего класс при запуске приложения?
Посл.ответ Сообщение

Ранг: 71.2 (постоянный)
Статус: Участник

Создано: 11 февраля 2014 16:23 · Поправил: kunix New!
Цитата · Личное сообщение · #1

Итак, есть готовое приложение без исходников.
Нужно делать некоторое действие при старте приложения.
Я считаю, что самый нормальный путь - добавить свой класс и попросить Android создавать его инстанс при запуске приложения.
Вопрос в том, как правильно попросить Android?

Еще можно дописывать smali код, но это геморно делать каждый раз для новой версии.

Я пробовал добавлять подкласс android.app.Application, и даже прописывал его в еще одну ветку <application> в AndroidManifest.xml. Не помогло.
Сейчас погуглил и понял, что это было глупо.

Тогда я попробовал создать ветку <application> без атрибута android:name. Тогда вообще перестались создаваться инстансы подклассов android.app.Application.

Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 11 февраля 2014 18:17 · Поправил: SaNX New!
Цитата · Личное сообщение · #2

Надо добавлять в манифесте
<activity
android:name="com.hueta.YourActivityName"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

И твой класс первым получит управление при запуске. Из своего класса запускай основное приложение.
Строки
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

в манифесте должны быть только в одном месте - в описании твоего класса.

| Сообщение посчитали полезным: kunix


Ранг: 71.2 (постоянный)
Статус: Участник

Создано: 11 февраля 2014 23:24 · Поправил: kunix New!
Цитата · Личное сообщение · #3

Вроде заработало. Сделал так:
1) Создал в eclipse проект с MainActivity.java и NewMainActivity.java.
Содержимое MainActivity.java тривиально.
Содержимое NewMainActivity.java следующее:
Code:
  1. package com.blah1.blah2;
  2. import android.os.Bundle;
  3. import android.util.Log;
  4. import android.app.Activity;
  5. import android.content.DialogInterface;
  6. import android.content.Intent;
  7. import android.app.AlertDialog;
  8. public class NewMainActivity extends Activity {
  9.          @Override
  10.          protected void onCreate(Bundle savedInstanceState) {
  11.                  Log.e("testapp", "NewMainActivity::OnCreate()");
  12.                  super.onCreate(savedInstanceState);
  13.                  
  14.                  //do something stupid here...
  15.                  
  16.                  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  17.                  builder.setTitle("Важное сообщение!");
  18.                  builder.setMessage("Покормите кота!");
  19.                  builder.setCancelable(false);
  20.                  builder.setNeutralButton("OK", 
  21.                                    new DialogInterface.OnClickListener() {
  22.                                        public void onClick(DialogInterface dialog, int id) {
  23.                                           dialog.cancel();
  24.                                           Intent intent = new Intent(NewMainActivity.this, MainActivity.class);
  25.                                           startActivity(intent);
  26.                                           finish();
  27.                                        }
  28.                                    });
  29.                  builder.show();
  30.          }       
  31.          @Override
  32.          protected void onDestroy() 
  33.          {
  34.                  Log.e("testapp", "NewMainActivity::onDestroy()");
  35.                  super.onDestroy();
  36.          }
  37. }

2) Собрал проект в eclipse. Разобрал получившийся apk при помощи apktool.
3) Разобрал при помощи apktool программу-жертву.
4) Скопировал NewMainActivity.smali и NewMainActivity$1.smali в программу-жертву.
5) Добавил в AndroidManifest.xml жертве тег <activity> для NewMainActivity. Также убрал <intent-filter> у MainActivity.
Code:
  1.         <activity
  2.             android:name="com.blah1.blah2.NewMainActivity"
  3.             android:label="@string/app_name" >
  4.             android:noHistory="true"
  5.             <intent-filter>
  6.                 <action android:name="android.intent.action.MAIN" />
  7.                 <category android:name="android.intent.category.LAUNCHER" />
  8.             </intent-filter>
  9.         </activity>

6) Собрал жертву через apktool.

Ну вроде нормально работает. При запуске показывает сообщение и по нажатию на ОК запускает MainActivity.
 eXeL@B —› Основной форум —› Android: как создавать инстанс своего класс при запуске приложения?

Видеокурс ВЗЛОМ