Используя Make-файл вместо файлов Решения/Проекта в соответствии с Visual Studio (2005)

public class takeimage extends Fragment {

    private Uri mImageCaptureUri;
    private static final int PICK_FROM_CAMERA = 1;
    private static final int PICK_FROM_FILE = 2;
    private String mPath;
    private ImageView mImageView;
    Bitmap bitmap = null;
    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.activity_send_image, container, false);
        final String[] items = new String[] { "From Camera", "From SD Card" };
        mImageView = (ImageView)view.findViewById(R.id.iv_pic);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_item, items);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Select Image");

        builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                if (item == 0) {
                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    File file = new File(Environment.getExternalStorageDirectory(), "tmp_avatar_"
                        + String.valueOf(System.currentTimeMillis())
                        + ".jpg");
                    mImageCaptureUri = Uri.fromFile(file);

                    try {
                        intent.putExtra(
                            android.provider.MediaStore.EXTRA_OUTPUT,
                            mImageCaptureUri);
                        intent.putExtra("return-data", true);

                        getActivity().startActivityForResult(intent,
                            PICK_FROM_CAMERA);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    dialog.cancel();
                } else {
                    Intent intent = new Intent();

                    intent.setType("image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);

                    getActivity().startActivityForResult(
                        Intent.createChooser(intent,
                            "Complete action using"), PICK_FROM_FILE);
                }
            }
        });
        final AlertDialog dialog = builder.create();

        Button show = (Button) view.findViewById(R.id.btn_choose);
        show.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Switch the tab content to display the list view.
                dialog.show();
            }
        });

    return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode != Activity.RESULT_OK)
            return;

        if (requestCode == PICK_FROM_FILE) {
            mImageCaptureUri = data.getData();
            // mPath = getRealPathFromURI(mImageCaptureUri); //from Gallery

            if (mPath == null)
                mPath = mImageCaptureUri.getPath(); // from File Manager

            if (mPath != null)
                bitmap = BitmapFactory.decodeFile(mPath);
        } else {
            mPath = mImageCaptureUri.getPath();
            bitmap = BitmapFactory.decodeFile(mPath);
        }
        mImageView.setImageBitmap(bitmap);  
    }

    public String getRealPathFromURI(Uri contentUri) {
        String [] proj = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(contentUri, proj, null, null,null);

        if (cursor == null) return null;

        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
} 
11
задан JBentley 8 January 2014 в 21:32
поделиться

5 ответов

Я нашел некоторые преимущества для make-файлов с крупными проектами, главным образом связанными с объединением местоположения настроек проекта. Несколько легче управлять списком исходных файлов, включать пути, препроцессор определяет и так далее, если они - все в make-файле или другом файле конфигурации сборки. С несколькими конфигурациями, добавляя включать путь означает, что необходимо удостовериться, что Вы обновляете каждую конфигурацию вручную через трудные свойства проекта Visual Studio, которые могут стать довольно утомительными, поскольку проект увеличивается в размере.

Проектами, которые используют много сделанных на заказ инструментов, может быть легче управлять также, такой, как будто необходимо скомпилировать пиксель / вершинные шейдеры или код на других языках без собственной поддержки VS.

У Вас должны будут все еще быть всевозможные конфигурации проекта однако, так как необходимо будет дифференцировать вызов инструмента сборки для каждой конфигурации (например, передающий в различных параметрах командной строки для создания).

Непосредственные оборотные стороны, которые приходят на ум:

  • Более медленные сборки: VS не особенно быстр при вызове внешних инструментов, или выровняйте работу, должно ли это разработать проект во-первых.
  • Неловкие зависимости межпроекта: это трудно для установки так, чтобы dependee вызвал основной проект создать, и более трудный, чтобы удостовериться, что они создаются в правильном порядке. Я имел некоторый успех, заставляя SCons сделать это, но это всегда - проблема получить работу хорошо.
  • Потеря некоторых полезных функций IDE: Отредактируйте и Продолжите быть основным!

Короче говоря, Вы проведете меньше времени, управляя Вашими конфигурациями проекта, но больше времени, подключая Visual Studio коаксиальным кабелем для работы правильно с ним.

5
ответ дан 3 December 2019 в 10:45
поделиться

Visual Studio создается сверху файлов конфигураций MSBuild. Можно рассмотреть *proj и *sln файлы как make-файлы. Они позволяют Вам полностью настраивать процесс сборки.

2
ответ дан 3 December 2019 в 10:45
поделиться

В то время как это технически возможно, это не очень дружественное решение в рамках Visual Studio. Это будет бороться с Вами все время.

Я рекомендую смотреть на NAnt. Это - очень устойчивая система сборки, где можно сделать в основном что-либо, что Вы должны.

Наш сценарий NAnt делает это на каждой сборке:

  1. Переместите базу данных в последнюю версию
  2. Генерируйте объекты C# прочь базы данных
  3. Скомпилируйте каждый проект в нашем "основном" решении
  4. Выполните все модульные тесты
  5. Выполните все интеграционные тесты

Кроме того, наш сервер сборки усиливает это и добавляет еще 1 задачу, которая генерирует документацию Замка из песка.

Если Вам не нравится XML, Вы могли бы также смотреть на Грабли (рубин), Bake/BooBuildSystem (Шиканье) или Psake (PowerShell)

1
ответ дан 3 December 2019 в 10:45
поделиться

Можно использовать nant, чтобы разработать проекты индивидуально таким образом замена решения и иметь 1 решение для кодирования и никакие решения для сборки.

1 вещь иметь в виду, то, что решением и csproj файлами от по сравнению с 2005 и являются msbuild сценарии. Таким образом, если Вы знакомитесь с msbuild, Вы смогли владеть существующими файлами, делать по сравнению с более легким, и делать Ваше развертывание легче.

0
ответ дан 3 December 2019 в 10:45
поделиться

У нас есть подобный набор как тот, который Вы описываете. Мы поддерживаем по крайней мере 3 различных платформы, таким образом, мы нашли что с помощью CMake для чесотки различные решения для Visual Studio. Настроенный может быть немного болезненным, но это в значительной степени сводится к чтению документов и нескольких учебных руководств. Необходимо смочь сделать фактически все, что можно сделать путем движения в свойства проектов и решения. Не уверенный, если у Вас могут быть все три сборки платформ, сосуществующие в том же решении, но можно использовать CruiseControl для заботы о сборках и выполнении сценариев тестирования как часто по мере необходимости.

0
ответ дан 3 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: