Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Eclipse Lint API checks

Thanks P.T. for what looks like the correct answer to question Building multi-SDK Android apps in Eclipse without losing compile-time checks. However, when I try to use the @TargetApi() annotation as recommended, it generates syntax errors.

@TargetApi(11)    // location 1
public class DisplayMessageActivity extends Activity {

    @Override
    @TargetApi(11)    // location 2
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            @TargetApi(11)    // location 3
            getActionBar().setDisplayHomeAsUpEnabled(true); }

generates two syntax errors on the @TargetApi line when it is in the middle of the code as shown at location 3:

x Syntax error, insert "enum Identifier" to complete EnumHeaderName
x Syntax error, insert "enumBody" to complete BlockStatements

The errors exist whether I have the @TargetApi line before the if statement or after it as shown. Are there any prerequisites (imports) or other considerations not mentioned in the Lint API Check article http://tools.android.com/recent/lintapicheck to get @TargetApi() working correctly?

--- Edit 9/3/2012 ---

If I move the @TargetApi annotation to before the class definition (shown as location 1) or before the method definition (shown as location 2, either before or after the @Override annotation), I get different errors:

x TargetApi cannot be resolved to a type
x The attribute value is undefined for the annotation type TargetApi

--- Edit 9/4/2012 ---

Here is the full source code:

package com.example.my.first.app;

import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class DisplayMessageActivity extends Activity {

    @TargetApi(11)
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ActionBar introduced in Android 3.0 Honeycomb API 11
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getActionBar().setDisplayHomeAsUpEnabled(true); }   // Up Navigation

        // Get the message from the intent
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        // Create the text view
        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);

        // Set the text view as the activity layout
        setContentView(textView);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_display_message, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

}
like image 362
Dave Avatar asked Sep 01 '12 23:09

Dave


People also ask

How do you do lint check on Android?

Lint checks are automatically performed by the Gradle build system. To see the available checks in Android Studio File Settings Editor Inspections. You can also run the lint checks manually by right-clicking on your project and select Analyze Inspect Code. You can run link also from the command line.

Where can I find lint report?

Run lint using the standalone tool You can then locate the lint tool at android_sdk /cmdline-tools/ version /bin/lint . For example, you can issue the following command to scan the files under the myproject directory and its subdirectories.


1 Answers

FizzBuzz provided the answer to this in How do you version code in Android without compiler warnings?.

In addition to the @TargetApi(nn) annotation in the code, you also need to import the definition of that annotation:

import android.annotation.TargetApi;

For some unknown reason, an import is not required to use the @Override annotation. It would be helpful if the ADT documentation http://tools.android.com/recent/lintapicheck were fixed to eliminate the bogus code example and mention the required import.

like image 78
Dave Avatar answered Oct 03 '22 03:10

Dave