Hur slå ihop två projekt/appar till ett projekt (en app)?

Diskussion i 'Frågor, support och diskussion' startad av xtreme, 7 aug 2012.

  1. xtreme

    xtreme Adult Droid Medlem

    Blev medlem:
    12 apr 2010
    Inlägg:
    516
    Mottagna gillanden:
    13

    MINA ENHETER

    Har gjort två småspel som nu är i två olika projekt i Eclipse och kompileras som två fungerande fristående apk.

    Skulle vilja slå ihop dem så att de hamnar i samma projekt, dvs det blir två spel i en kompilerad apk. När användaren startar appen får h*n upp två ikoner (knappar) där h*n kan välja om h*n vill spela spel X eller spel Y (spel X och Y är mina två småspel).

    Hur slår man bäst ihop två projekt (småspel) till en samlingsapp för dessa två småspel?
     
  2. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Du skiljer på dem via olika aktiviteter. Så jag skulle lägga in projekten i varsitt paket (package) där deras egna aktiviteter startar spelen. Därefter gör du bara en startaktivitet som är den som startar när applikationen drar igång. Där lägger du in två ikoner eller vad du nu vill ha som pekar mot dina specifika spelaktiviteter.
     
  3. Maxxan

    Maxxan Youth Droid Medlem

    Blev medlem:
    22 mar 2010
    Inlägg:
    162
    Mottagna gillanden:
    4

    MINA ENHETER

    Precis som ViLander säger så ha dem som olika aktiviteter. Skapa ett workspace med ett projekt som är huvudprojekt där man kan välja vilket spel man vill spela, sen importerar du de andra projekten du redan har och väljer att de är bibliotek (Is Library i Preferences).
     
  4. xtreme

    xtreme Adult Droid Medlem

    Blev medlem:
    12 apr 2010
    Inlägg:
    516
    Mottagna gillanden:
    13

    MINA ENHETER

    Tackar för era svar. Ni säger lika förutom att den ena förespråkar att ha allt i samma projekt med olika paket och den andra i bibliotek. Får en känsla av att bibliotek är bättre (vet inte varför), men får det inte att fungera.

    Har gjort följande enligt: http://developer.android.com/tools/projects/projects-eclipse.html

    • Skapat ett nytt projekt med en knapp (som ska fungera som huvudappen).
    • Högerklickat på mitt spel, Preferences, android och bockat i "Is Library"
    • Högerklickat på mitt huvudprojekt, Preferences, Android och valt mitt spel(projekt) som referens.

    Huvudappen har följande kod. Mitt spel i andra projektet ligger

    Kod:
    public class AppActivity extends Activity {
    
    	Button button;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		addListenerOnButton();
    	}
    
    	public void addListenerOnButton() {
    
    		final Context context = this;
    
    		button = (Button) findViewById(R.id.button1);
    
    		button.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    
    				Intent intent = new Intent(context, org.games.puzzle.MainActivity.class);
                    startActivity(intent);   
    
    			}
    
    		});
    
    	}
    
    }
    
    I min huvudapp i AndroidManifest.xml har jag lagt till:

    HTML:
            <activity
                 android:name="org.games.puzzle.MainActivity" >
            </activity>
    
    I mitt spel ser Androidmanifest ut som tidigare:


    HTML:
    <activity android:name=".MainActivity" android:label="@string/activity_title">
    
    Min huvudapp startar utan problem och inga error. När jag klickar på knappen får jag error och appen crachar.

    Felet:
    HTML:
    java.lang.InstantiationException: can't instantiate class org.games.puzzle.MainActivity
    
    puzzle.jar har skapats i "android dependencies" i mitt huvudprojekt.
     
    Last edited: 7 aug 2012
  5. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 dec 2009
    Inlägg:
    1 594
    Mottagna gillanden:
    172

    MINA ENHETER

    Använd bibliotek, det är smidigare. Men felen kan jag tyvärr inte hjälpa dig med, har inte direkt mycket erfarenhet av just användandet av olika bibliotek i en och samma applikation.
     
  6. xtreme

    xtreme Adult Droid Medlem

    Blev medlem:
    12 apr 2010
    Inlägg:
    516
    Mottagna gillanden:
    13

    MINA ENHETER

    Testade att skapa ett nytt projekt nu, ett enkelt Hello World som jag gjorde till bibliotek. Gjorde exakt samma som jag beskrev tidigare med mitt minispel och detta fungerade utan problem att starta genom en knapp i min huvudapp. Frågan är vad jag gör för fel med mitt minispel? Kan det ha något att göra med att mitt minispel i sig också har flera aktiviteter (Hello World har ju bara en som startar direkt)?

    I dokumentationen står det

    HTML:
    Declaring library components in the manifest file
    
    In the manifest file of the application project, you must add declarations of all components that the application will use that are imported from a library project. For example, you must declare any <activity>, <service>, <receiver>, <provider>, and so on, as well as <permission>, <uses-library>, and similar elements.
    
    Declarations should reference the library components by their fully-qualified package names, where appropriate.
    
    Vet inte exakt vad som menas med det ;-) Kanske missat något där?
     
    Last edited: 7 aug 2012
  7. Maxxan

    Maxxan Youth Droid Medlem

    Blev medlem:
    22 mar 2010
    Inlägg:
    162
    Mottagna gillanden:
    4

    MINA ENHETER

    Kolla vad logcat säger om det är något som gör att du inte kan starta din aktivitet. Googla på ditt fel och se om du kan få nån idé om vad det kan vara, svårt att svara på bara sådär. :)
     
  8. xtreme

    xtreme Adult Droid Medlem

    Blev medlem:
    12 apr 2010
    Inlägg:
    516
    Mottagna gillanden:
    13

    MINA ENHETER

    Delar med mig av koden om någon vill vara snäll och titta närmare på det.

    Här finns båda projekten https://dl.dropbox.com/u/36779/library_project.zip

    Puzzle är ett open source projekt som jag försökt få att fungera som bibliotek och kan även hämtas här: http://code.google.com/p/androidsoft/source/browse/trunk/puzzle/

    Projektet "Navigation" har en klass med en knapp. När man klickar på den ska Puzzle öppnas.

    Här är min LogCat. Provat att sätta debuggern i AbstractMainActivity.java i metoden onCreate men får inte fram vad det kan vara.

    Kod:
    08-08 12:44:31.607: E/AndroidRuntime(780): FATAL EXCEPTION: main
    08-08 12:44:31.607: E/AndroidRuntime(780): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mkyong.android/org.androidsoft.games.puzzle.kids.MainActivity}: java.lang.NullPointerException
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.os.Handler.dispatchMessage(Handler.java:99)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.os.Looper.loop(Looper.java:137)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.app.ActivityThread.main(ActivityThread.java:4745)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at java.lang.reflect.Method.invokeNative(Native Method)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at java.lang.reflect.Method.invoke(Method.java:511)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at dalvik.system.NativeStart.main(Native Method)
    08-08 12:44:31.607: E/AndroidRuntime(780): Caused by: java.lang.NullPointerException
    08-08 12:44:31.607: E/AndroidRuntime(780):  at org.androidsoft.games.puzzle.kids.AbstractMainActivity.onCreate(AbstractMainActivity.java:81)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at org.androidsoft.games.puzzle.kids.MainActivity.onCreate(MainActivity.java:57)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.app.Activity.performCreate(Activity.java:5008)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
    08-08 12:44:31.607: E/AndroidRuntime(780):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
    08-08 12:44:31.607: E/AndroidRuntime(780):  ... 11 more
    
     
  9. Buzz

    Buzz Android Apprentice Medlem

    Blev medlem:
    14 maj 2010
    Inlägg:
    4 920
    Mottagna gillanden:
    2 218

    MINA ENHETER

    Jag gissar på översta raden av dessa två:

    08-08 12:44:31.607: E/AndroidRuntime(780): at org.androidsoft.games.puzzle.kids.AbstractMainActivity.onCreate(AbstractMainActivity.java:81)
    08-08 12:44:31.607: E/AndroidRuntime(780): at org.androidsoft.games.puzzle.kids.MainActivity.onCreate(MainActivity.java:57)

    Dvs fundera på varför något är null på rad 81 i AbstractMainActivity.java.