Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Проясните разницу между CompatActivity, Support Library, SDK version и некоторыми другими параметрами

Доброго дня.
Путаюсь и не до конца понимаю смысл некоторых параметров проектов Android, типов классов, версий библиотек и других параметров, а главное их влияния друг на друга.

1. При добавлении активити можно выбрать "Backwards Compability (AppCompat)". По смыслу переводится как "обратная совместимость", т.е. как правильно понимаю возможность работы этой конкретной активити на старых версиях Android? А на сколько старых?

2. Второй вопрос вытекает из первого - разница в результате (сначала) будет только в том, от кого унаследован класс этой Активити - просто от Activity или от AppCompatActivity?
Что будет если я буду использовать Activity?

3. Что "ПОДДЕРЖИВАЮТ" библиотеки android.support.v4 и android.support.v7? Виджеты, элементы View и др. компоненты могут быть представлены как в android.app так и в вышеописанных библиотеках (или только в одной из них, в v7). Если необходимый класс присутствует то откуда его лучше импортировать? Какая разница между 4 и 7, с чем вообще соотносятся эти версии? Бывает вроде работает и так и так.

4. В build.gradle есть параметры (пример)
Код
compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
minSdkVersion - это то значение, которое видимо выставится при создании проекта, там где можно указать Minimum SDK. Насколько критично проваливаться в прошлое, в старые версии SDK? Это вообще на что-нибудь влияет и связало ли как-то с классом AppCompatActivity и support-библиотеками?
А разница между compileSdkVersion, buildToolsVersion и targetSdkVersion тогда ещё мешьше ясна. Мы можем тут изменять версию компилятора, утилит сборки и ещё в добавок можем указать целевую версию SDK? Зачем всё это, тонкости не очевидны когда и при каких обстоятельствах эти значения могут быть разными? И насколько разными, главное не ниже minSdkVersion?

Буду очень признателен если кто-нибудь в общих чертах опишет взаимосвязи а то клубок непонятных знаний никак не распутывается.
Ответ:
Сообщение от Nedoluga
Совместимость с определенными инструментами
А, т.е. термин support ("поддержка") обозначает расширение инструментария но никак не глубину совместимости со старыми версиями SDK! Т.е. support и MinSDK/BackwardCompability термины из разных и не влияющих друг на друга плоскостей.
Вопрос: Ошибки android-support-v7 при создании нового проекта в Eclipse

Приветствую Вас, форумчане! Возникла такая проблема, как я понял довольно распространенная. Установил Eclipse Mars. При создании нового проекта Android Application вылезает куча ошибок, связанных с библиотекой android-support-v7. Глянул в Android SDK Manager, там Android Support Repository установлен.

Гугл советует подключить эту библиотеку в свойствах проекта и якобы проект с этой библиотекой создается автоматически. Но у меня ничего автоматически не создается и в свойствах проекта эту библиотеку подключить нельзя: ибо нету ее нифига в списке.
Прикладываю скрины проблемы.
Очень надеюсь на Вашу помощь! Спасибо.
Ответ: Lost_Angel, попробуйте вывернуться без нее (android-support-v7)
Вопрос: Ошибки рендеринга после установки android-support v4

Всем привет!
Случилась непонятная фигня, решил адаптировать свое приложение под устройства с android 4 и выше, установил библиотеку android-support v4, и тут понеслись ошибки рендеринга. Я вообще новичек в этом деле и для меня пока еще это лес. Удалил библиотеку, думал все встанет на место, ан нет, так и остались те ошибки вылезать, подскажите что делать? куда смотреть кроме гугла)))

Вот ошибки:
The following classes could not be instantiated:
-*android.support.design.widget.NavigationView (Open Class, Show Exception, Clear Cache)
-*android.support.v7.widget.ActionBarContainer (Open Class, Show Exception, Clear Cache)
-*android.support.design.widget.AppBarLayout (Open Class, Show Exception, Clear Cache)
-*android.support.v7.widget.ActionBarContextView (Open Class, Show Exception, Clear Cache)
-*android.support.v7.app.WindowDecorActionBar (Open Class, Show Exception, Clear Cache)
Tip: Use View.isInEditMode() in your custom views to skip code or show sample data when shown in the IDE. If this is an unexpected error you can also try to build the project, then manually refresh the layout. Exception Details java.lang.NoSuchMethodError: android.support.v4.view.ViewCompat.setBackground(Landroid/view/View;Landroid/graphics/drawable/DrawableV **at android.support.design.widget.NavigationView.<init>(NavigationView.java:116) **at android.support.design.widget.NavigationView.<init>(NavigationView.java:100) **at java.lang.reflect.Constructor.newInstance(Constructor.java:423) **at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) **at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:858) **at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) **at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) **at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) **at android.view.LayoutInflater.inflate(LayoutInflater.java:518) **at android.view.LayoutInflater.inflate(LayoutInflater.java:397) Copy stack to clipboard

Добавлено через 3 минуты
Пробовал и чистку и ребилд и чистку кэша , не помогло
Ответ:
Сообщение от hossen
Скачал файл android-support v4, вложил его в папку libs, в программе во вкладке "структура проекта" в депенденсис указал эту библиотеку
Вот это в студии делается намного проще.
Вопрос: Идеология com.android.support:appcompat

Немного не ясно назначение данной библиотеки.
Насколько я понимаю, она нужна, чтобы новые прикольные графические фичи работали на андроидах со старым API.
Хорошо, собираю свой APK; minSDK API 15, targetSDK 25
Размер файла 2 Мб получается.
Собираю при minSDK API 25, targetSDK 25 - те же 2 Мб
Внутри в classes.dex лежит полный com.android.support, хотя я его не подключал во второй раз в build.gradle
По идее, данная библиотека не нужна на API 25.
Она же только для старых систем.
Или не так?

п.с. Моя цель была сделать APK небольшого размера для последних API
Ответ: Лучше?
Сразу после выхода support-v4 добавить NavigationDrawer в стандартный android API - кто мешал? У меня 55% пользователей Android 5.0+, им я бы уже легкую версию раздавал.
А чтобы не было всего геморроя c прямой и обратной совместимостью в коде использовать всегда классы из стандартного API, а в манифесте приложения и при сборке указывать для какого API должны использоваться стандартные классы, для какого - support.
Что это, сложно реализовать? Всяко лучше чем мегабайтные библиотеки с собой таскать повсюду. Половина моих пользователей на хромом EDGE сидят (сельская местность), им апдейтиться раз в две недели по 2 мегабайта довольно некомфортно.

Добавлено через 5 минут
Сообщение от demixdn
ruslan13, ProGuard режет все ненужные классы, оставляя только те, на которые вы ссылаетесь в проекте или ссылаются подключенные компоненты. Если они есть в проекте с включенным ProGuard, значит они используются.
А если хотите уменьшить вес, избавляйтесь от них и заменяйте чем-то другим, стандартным либо самописным.
demixdn, попробую убрать весь support, что смогу, и замерю работу прогарда. О результатах отпишусь.

Добавлено через 59 минут
Отписываюсь.
Один NavigationDrawer тащит за собой 90Кб кода из support'a. Другие "незаменимые" элементы пока не тестировал.
В принципе, есть за что побороться..
Вопрос: Desing Support на eclipce

Здравствуйте. Нужна помощь, не получается залить Android Design Support Library в эклипс. По советам из поиска добавляю как проект, ставлю isLibrary и связываю со своим проектом. Даже если закрыть глаза на периодические поругивания, что не хватает каких-то ресурсов, в основном проекте подчеркиваются все упоминания R. ... Пробовал залить ее через AppCompat - то же самое. Версии SDK все одинаковые, если висят по раздельности, то никто ни на кого не ругается (знаю, что студия лучше).
Ответ: ExFau$t, это какие библиотеки работают только в эклипсе?
Вопрос: Для чего нужен android.support.v4

Вопрос к знатокам: почему AS по умолчанию импортирует в проект классы из библиотеки поддержки? minSdk 19 (4.4).
Еще просвятите плз - support.v4 это насколько понимаю библиотека для поддержки фишек 4го андройда в более ранних, так?
Ответ:
Сообщение от androbro
да причем тут фрагменты.
А, теперь понял. Я сначала подумал, что речь только о фрагментах, а вопрос оказался более общим.
Сообщение от androbro
потому что в support'e появился Toolbar, которых хорошо кастомизируется
Согласен, ActionBar был полной засадой, хотя пока не так много программ, в которых ToolBar используется как-то сильнее, чем просто замена ActionBar.
Вопрос: Eclipse proguard public class android.support.v7.internal.widget.ActionBarView.HomeView

Добрый день. Сейчас изучаю разработку под андроид. Споткнулся на следующей ошибке
This class should be public (android.support.v7.internal.widget.ActionBarView.HomeView)

пробовал фиксить разными способами proguard-project.txt, но эффекта 0.
Может подскажете?
Приложение чистое, дефолтное, которое создаётся при создании Android application project. правки вносились только на удаления всяких ошибок "color" на "android:color", error на warning для translation и т.д.


Текущий вид:
-keep public class android.support.v7.internal.widget.ActionBarView.HomeView
-keep public class android.support.v7.internal.widget.ActionBarView
-keepclassmembers class android.support.v7.internal.widget.ActionBarView{
public *;
}
-keepclassmembers class android.support.v7.internal.widget.ActionBar{
public *;
}
-keepclassmembers class android.support.v7.internal.widget.ActionBarView.HomeView{
public *;
}

PS: IDE Eclipse Kepler, ADT 22.6.1, SDK adt-bundle-windows-x86_64-20131030
Ответ: Спасибо, помогло
Вопрос: Android.support.v4.app.FragmentActivity не работает в Android Studio

объясните пожалуйста,как в андроид студио добавить вышеуказанную библиотеку,чтобы работало у меня вот это Активити
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.bignerdranch.android.criminalintent;
 
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.Fragment;
 
public class CrimeActivity extends FragmentActivity{
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_crime);
    }
 
 
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
}
Ответ: гугл говорит следующее...

On Android Studio, File > Project Structure (Ctrl + Alt + Shift + S) Select app, tab Dependecies, and in the +, put the librarys that you will use.


Как вы живете, если информацию даже найти не в силах?!
Вопрос: Как подключить com.android.support:design в Eclipse

Доброго дня!
Недавно вышла новая библиотека com.android.support:design - вопрос как её подключить в среде Eclipse?
От куда взять/установить/скачать и в дальнейшем использовать в своих проектах. Все примеры что я нашел - относятся к Android Studia...
За ранее спасибо.
Ответ: upp
Вопрос: GetSupportLoaderManager() и импорт суппорт библиотек

Помогите разобраться, плз.
Что-то с импортом библиотек, но что именно понять не могу.
Все библиотеки, которые спрашивает на выбор - выбираю с "support"
Хелп, плз.

Строка 92 - getSupportLoaderManager() - подчеркивает красным,
пишет - Cannot make a static reference to the non-static method getSupportLoaderManager() from the type FragmentActivity

Делаю урок отсюда -

Проект создаю:
Min SDK - 11
Target SDK - 11
Compile With - 19

MainActivity.java
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package com.example.p0521_simplecursoradapter;
 
import java.util.concurrent.TimeUnit;
 
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.ActionBarActivity;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
 
 
 
public class MainActivity extends ActionBarActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
 
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
 
        public PlaceholderFragment() {
        }
        
        private static final int CM_DELETE_ID = 1;
        ListView lvData;
        DB db;
        SimpleCursorAdapter scAdapter;
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            
            // открываем подключение к БД
            db = new DB(getActivity());
            db.open();
            
            // формируем столбцы сопоставления
            String[] from = new String[] { DB.COLUMN_IMG, DB.COLUMN_TXT };
            int[] to = new int[] { R.id.ivImg, R.id.tvText };
 
            // создааем адаптер и настраиваем список
            scAdapter = new SimpleCursorAdapter(getActivity(), R.layout.item, null, from, to, 0);
            lvData = (ListView) rootView.findViewById(R.id.lvData);
            lvData.setAdapter(scAdapter);
 
            // добавляем контекстное меню к списку
            registerForContextMenu(lvData);
            
            // создаем лоадер для чтения данных
            getSupportLoaderManager().initLoader(0, null, getActivity());
            
            return rootView;
        }
        
        // обработка нажатия кнопки
        public void onButtonClick(View view) {
            // добавляем запись
            db.addRec("sometext " + (scAdapter.getCount() + 1), R.drawable.ic_launcher);
            // получаем новый курсор с данными
             getSupportLoaderManager().getLoader(0).forceLoad();
        }
          
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            menu.add(0, CM_DELETE_ID, 0, R.string.delete_record);
        }
 
        public boolean onContextItemSelected(MenuItem item) {
            if (item.getItemId() == CM_DELETE_ID) {
                // получаем из пункта контекстного меню данные по пункту списка
                android.widget.AdapterView.AdapterContextMenuInfo acmi = (android.widget.AdapterView.AdapterContextMenuInfo) item
                        .getMenuInfo();
                // извлекаем id записи и удаляем соответствующую запись в БД
                db.delRec(acmi.id);
                // получаем новый курсор с данными
                getSupportLoaderManager().getLoader(0).forceLoad();
                return true;
            }
            return super.onContextItemSelected(item);
        }
 
        public void onDestroy() {
            super.onDestroy();
            // закрываем подключение при выходе
            db.close();
        }
 
        public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
            return new MyCursorLoader(getActivity(), db);
        }
 
        public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
            scAdapter.swapCursor(cursor);
        }
 
        public void onLoaderReset(Loader<Cursor> loader) {
        }
          
        static class MyCursorLoader extends CursorLoader {
 
            DB db;
            
            public MyCursorLoader(Context context, DB db) {
                super(context);
                this.db = db;
            }
            
            @Override
            public Cursor loadInBackground() {
                Cursor cursor = db.getAllData();
                try {
                    TimeUnit.SECONDS.sleep(3);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return cursor;
            }
        }
    }
}
Ответ: Блин... наткнулся на эту тему, дай думаю тут вопрос задам... знаю что тема старая)

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class PageFragment extends Fragment implements LoaderCallbacks<Cursor>{
 
    public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
        return new MyCursorLoader(getActivity(), myDB);
    }
 
    static class MyCursorLoader extends CursorLoader {
 
          DBAdapter db;
 
          public MyCursorLoader(Context context, DBAdapter db) {
            super(context);
            this.db = db;
          }
 
          @Override
          public Cursor loadInBackground() {
              Cursor cursor = db.getAllRows();
              return cursor;
          }
}
Ругается на getActivity(). Пишет:

Required: android.support.v4.content.Loader <android.database.Cursor>
Found: "myPackageNameAndAppName".PageFragment.MyCursorLoader


Если getActivity() поменять на
Код Java(TM) 2 Platform Standard Edition 5.0
1
return new MyCursorLoader(this, myDB)
MyCursorLoader (android.content.Context, DBAdapter) in MyCursorLoader cannot be applied to
("myPackageNameAndAppName".PageFragment, DBAdapter)


Че он ждет? В конструктор MyCursorLoader передаю контекст и базу данных. ему не нравится....

Добавлено через 1 час 6 минут
Все... разобрался...
в секции импорта вместо

import android.support.v4.content.CursorLoader;
импортировал:

import android.support.v4.content.Loader;