Avgöra vid compile time om det är debug build

Diskussion i 'Frågor, support och diskussion' startad av gibbon, 17 sept 2011.

  1. gibbon

    gibbon Kid Droid Medlem

    Blev medlem:
    29 jul 2009
    Inlägg:
    59
    Mottagna gillanden:
    0

    MINA ENHETER

    Kan man göra detta med java/android/eclipse/etc? Gärna utan att använda en massa special-verktyg. Med C och dess like kan man ju enkelt sätta en flagga så vet allt och alla vad som gäller..

    Jag vill alltså att kompilatorn selektivt plockar in och ut delar av min kod beroende på om det är debug eller release jag kompilerar. Det verkar ju inte vara allt för mycket begärt ändå. :) Och är det inte precis det som händer när man använder Log.d()?

    Jag sökte runt lite aldelles nyss, men det närmsta jag kunde komma var att kolla under run time om android.os.Build.TAGS innehåller "debug"..
     
  2. nadam

    nadam Youth Droid Medlem

    Blev medlem:
    10 feb 2010
    Inlägg:
    182
    Mottagna gillanden:
    31
    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact

    MINA ENHETER

    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact
    Log.d() och android.os.Build.TAGS kan inte användas för det. Jag tror inte det finns något sätt att göra det i samband med kompileringen heller. Det C har är en preprocessor som modifierar koden innan den kompileras.

    Vad du däremot kan göra är att kolla om din app är debuggable eller inte i runtime genom att kolla om packageInfo.applicationInfo.flags har flaggan ApplicationInfo.FLAG_DEBUGGABLE satt.

    Observera att man inte längre ska sätta debuggable i manifestet (sedan APK tools Revision 8). Det sköts numera automatiskt beroende på om man gör ett exporterat signerat bygge eller inte.
     
  3. JerryJ

    JerryJ Youth Droid Medlem

    Blev medlem:
    5 jul 2010
    Inlägg:
    170
    Mottagna gillanden:
    2

    MINA ENHETER

    Mitt trick är att göra en bool variabel som jag sedan if:ar på där jag vill köra något annorlunda.
     
  4. Buzz

    Buzz Android Apprentice Medlem

    Blev medlem:
    14 maj 2010
    Inlägg:
    4 941
    Mottagna gillanden:
    2 228

    MINA ENHETER

    Om man absolut vill så går det väl att använda den preprocessorn även för javakod? Fast man slipper nog att använda t.ex. eclipse då...
     
  5. gibbon

    gibbon Kid Droid Medlem

    Blev medlem:
    29 jul 2009
    Inlägg:
    59
    Mottagna gillanden:
    0

    MINA ENHETER

    Ok, tack. Det var ungefär vad jag hade väntat mig då. :/ Lite surt, men skadar inte att fråga.. ApplicationInfo.FLAG_DEBUGGABLE ger för övrigt infon vad jag hade hoppats få ut av Build.TAGS. (och ska få enligt dokumentationen, men så var det visst inte)

    Edit: Log.d() nämnde jag som ett exempel där jag hade fått för mig att hela anropet alltså försvinner under kompileringen, vilket då skulle antyda att det jag vill göra faktiskt är möjligt. Jag tog mig en titt på dokumentationen igen och såg att jag läst lite slarvigt! Stripped at runtime säger de ju.

    Ja jo det var det jag helst ville undvika som sagt. :)
     
    Last edited: 20 sept 2011
  6. nadam

    nadam Youth Droid Medlem

    Blev medlem:
    10 feb 2010
    Inlägg:
    182
    Mottagna gillanden:
    31
    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact

    MINA ENHETER

    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact
    Build.TAGS syftar på hur själva Android har byggts och har alltså inget att göra med bygget av din egen app. Den är nog bara satt till debug i lab-miljö hos Sony Ericsson etc.