반응형

출처:https://citynetc.tistory.com/221


안드로이드 스튜디오 업데이트 후 못보던 경고 메시지가 떴습니다.






Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html


Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html


Configuration 'testApi' is obsolete and has been replaced with 'testImplementation'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html


Configuration 'testCompile' is obsolete and has been replaced with 'testImplementation' and 'testApi'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html



에러를 해석해보면 대부분 "더 이상 A는 구현되지 않으니 B를 사용해라"는 뜻입니다.


build.gradle(app)에서 그대로 해주면 됩니다.


저는 아래처럼 되어있네요.


dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})

//andorid
compile 'com.android.support:support-v4:24.2.0'
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.android.support:design:24.2.0'
testCompile 'junit:junit:4.12'
}



Configuration 'androidTestCompile' is obsolete and has been replaced with 'androidTestImplementation' and 'androidTestApi'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

=> androidTestCompile 를 androidTestImplementation로 바꾸어 줍니다.


Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

=> compile을 implementation로 바꾸어 줍니다.


Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

=> 두번째 에러를 해결하면 자연스럽게 해결되더군요..


Configuration 'testApi' is obsolete and has been replaced with 'testImplementation'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

=> 이것도 두번째 에러를 해결하면 자연스럽게 해결되더군요..


Configuration 'testCompile' is obsolete and has been replaced with 'testImplementation' and 'testApi'.

It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

=> testCompile를 testImplementation로 바꾸어 줍니다.



dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})

//andorid
implementation 'com.android.support:support-v4:24.2.0'
implementation 'com.android.support:appcompat-v7:25.3.1'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:design:24.2.0'
testImplementation 'junit:junit:4.12'
}
짠~ 이렇게 설정후 Sync를 누르니 모든 에러가 없어졌습니다.

끝!



출처: https://citynetc.tistory.com/221 [cITy & ETC]

반응형
반응형

출처: https://software-creator.tistory.com/11

 

플러터를 빠르게 배우려면

어떻게 UI를 코드로 만드는지 알아야합니다.

다트를 공부하고 플러터를 배우는 것도 좋지만

플러터를 갖고 위젯을 조금씩 수정하고, 핫리로딩해보다가

모르는 게 나올 면 그때 다트를 찾아보는 게 효율적입니다.

제가 추천하는 학습 순서는 다음과 같습니다.

일단 위젯과 레이아웃의 사용법에 익숙해지고,

그 다음에 구글이 제공한 풍부한 예제를 분석해보고

실제 앱을 만들어보는 겁니다.

 

추천 사이트 학습 순서

1.코드랩 2.플러터 레이아웃 튜토리얼 문서 3.구글 플러터 예제 (갤러리) 분석 4.플러터 행성 만들기 튜토리얼 5.실제 제작

1. 코드랩- 첫 플러터 앱 만들기 1, 2

  • 구글 코드랩은 정말 설명이 깔끔한 편이고, 플러터 튜토리얼도 잘 되어 있습니다.

  • 배울 수 있는 것 : 첫 플러터앱 만들기, 위젯 개념 잡기, 리스트뷰 만들어보기, 버튼 클릭(Interactivity), 다른 페이지로 넘어가기 (Routing)

     

2. 플러터 레이아웃 튜토리얼 문서

  • 플러터도 위젯과 레이아웃의 종류가 다양한데요. 그 차이를 알아야 플러터를 자연스럽게 쓸 수 있죠. 이 문서를 보면 Row, Column, Expanded의 차이부터 시작해, 각종 레이아웃들(GridView, ListView, Stack )이 다 나와 있습니다. 무엇보다 예제 코드가 짧아서 바로 실행해 보기 좋죠.
  • 배울 수 있는 것 : 레이아웃에 대한 깊은 이해

 

3. 구글 예제 분석

  • 이런 게 있었나 싶은 위젯이나 기능들이 정말 많습니다. 꼭 폰에 넣어서 확인하면서 소스 분석해보세요.
  • 배울 수 있는 것 : 쿠퍼티노 디자인, 구글 표준 코드

 

4. 행성 정보 앱 만들기 (미디엄 글)

  • 5개의 포스트에 걸쳐 플러터의 기본 기능을 알려줍니다.
  • 디자인이 깔끔한데다가 2페이지로 구성된 앱이라 어떻게 페이지를 이동하는지 알 수 있습니다.
  • 배울 수 있는 것 : 이쁘게 레이아웃 잡기, Routing(페이지 이동), 애니메이션, 전반적인 복습

 

마무리

사실 여기까지 했으면 기본적으로 UI만드는 건 무리가 없습니다.

이제 제대로 앱을 만드려면 아래의 것들을 천천히 찾아보시면 되요.

  • 안드로이드, ios 네이티브 코드 쓰기
  • 웹에서 데이터 받아서 파싱하기
  • 각종 플러그인(로컬 데이터 베이스, 파이어베이스, 지도) 써보기
  • 위젯 깊이 알기 (렌더링 과정, inheritedWidget)

 

저도 이 글에서 소개한 글을 통해 플러터를 배웠고, 같은 순서로 튜토리얼을 만들어보려고 합니다~!

아, 그리고 전 유데미 플러터 과정은 좀 안 맞더군요. 별로 안 배웠는데 문제를 풀어야되서요.

 

영상으로 배우실 거면 유튜브 TensorProgramming도 좋습니다.

설명이 깔끔합니다.

세부적인 것도 다 풀어서 이야기해줍니다.

여기는 왜 async를 쓰고, isolate는 왜 쓰고, 왜 모델을 쓰는지 등 차근차근 말해주죠.

이해가 잘 됩니다. 단점은 영어란 거죠.

그래도 무료 영상 중에 이정도 퀄리티인 곳은 없습니다.

 

그럼 플러터 개발을 즐기실 수 있기를 바라며 글을 마치도록 하겠습니다.

반응형
반응형

flutter에서 생성한 폴더에 이동 후 실행 하면 정상적으로 실행된다. 

반응형
반응형


이전 포스트에서 리스트 뷰(ListView)를 만들고

리스트 중 하나의 항목을 클릭하면 해당 데이터를 Toast로 표시하는 예제를 소개했습니다.


이번엔 실제 어플에 좀더 많이 사용되는 예제를 소개합니다.


실제 ListView를 사용하는 어플들을 보면

해당 항목을 오래 눌렀을 때 별도의 메뉴가 팍! 나타나는 것을 보셨을 겁니다.


가장 대표적인 경우가 문자(메세제) 목록 중 하나를 삭제하거나 할 때

해당 목록을 오래 누르고 있으면 메뉴가 팍! 올라와서 선택할 수 있는 것을 말합니다.

많이 사용되겠죠.


Context 메뉴는 이미 이전 포스트에서 소개한 적이 있었습니다.

이를 ListView에 적용해 보도록 하겠습니다.


먼저 동작 결과를 보겠습니다.


스크롤 되는 ListView

  



ListView의 첫번째 항목을 길게 눌러서 Context 메뉴 표시

   



ListView의 세번째 항목을 길게 눌러서 Context 메뉴 표시

   



ListView의 마지막 항목을 길게 눌러서 Context 메뉴 표시

   




소스파일들은 이전 포스트의 아이템 클릭 예제에 몇가지만 추가했습니다.



레이아웃 파일은 이전 포스트와 마찬가지로 ListView 하나입니다. 

 activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="${relativePackage}.${activityClass}" >


    <ListView 

        android:id="@+id/listview"

        android:layout_width="match_parent"

        android:layout_height="200dp"/>


</RelativeLayout>


이번 예제는 Context Menu가 있기에 Menu설계를 위해

res폴더 >> menu폴더 >> menu_listview.xml을 만들었습니다.

(이전 포스트의 Context Menu 참고)


메뉴아이템을 설계하는 XML 리소스를 만듭니다.

(이전 옵션메뉴 포스트의 xml파일을 가져와도 됨)

res폴더 안에 'menu'라는 이름으로 폴더를 만드세요(절대 이름 틀리면 안됨)

만들어진 menu폴더안에 menu_listview.xml 파일을 하나 추가하세요.


메뉴 XML 리소스 파일

 mainmenu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    

    <item android:id="@+id/modify"

        android:title="Modify"/>

    

    <item android:id="@+id/delete"

        android:title="Delete"/>

    

    <item android:id="@+id/info"

        android:title="Info"/>    


</menu>

   


소스 코드는 이전 코드에서 새로 추가만 햇습니다.

이전 예제의 클릭은 당연히 동작하겠죠?


굵은 글씨가 새로 추가된 코드(code) 입니다. 

 MainActivity.java


public class MainActivity extends Activity {

//대량의 문자열 데이터를 저장할 Arraylist 객체 생성

ArrayList<String> mDatas= new ArrayList<String>();

ListView listview; //ListView 참조변수


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//문자열 데이터 ArrayList에 추가

mDatas.add("KOREA");

mDatas.add("CANADA");

mDatas.add("FRANCE");

mDatas.add("MEXICO");

mDatas.add("POLAND");

mDatas.add("SAUDI ARABIA");

//ListView가 보여줄 뷰를 만들어내는 Adapter 객체 생성

//ArrayAdapter : 문자열 데이터들을 적절한 iew로 1:1로 만들어서 List형태로 ListView에 제공하는 객체

//첫번째 파라미터 : Context객체 ->MainActivity가 Context를 상속했기 때문에 this로 제공 가능

//두번째 파라미터 : 문자열 데이터를 보여줄 뷰. ListView에 나열되는 하나의 아이템 단위의 뷰 모양

//세번째 파라미터 : adapter가 뷰로 만들어줄 대량의 데이터들

//본 예제에서는 문자열만 하나씩 보여주면 되기 때문에 두번째 파라미터의 뷰 모먕은 Android 시스템에서 제공하는

//기본 Layout xml 파일을 사용함.

ArrayAdapter adapter= new ArrayAdapter(this, android.R.layout.simple_list_item_1, mDatas);

listview= (ListView)findViewById(R.id.listview);

listview.setAdapter(adapter); //위에 만들어진 Adapter를 ListView에 설정 : xml에서 'entries'속성

//ListView의 아이템 하나가 클릭되는 것을 감지하는 Listener객체 설정 (Button의 OnClickListener와 같은 역할)

listview.setOnItemClickListener(listener);

//ListView를 Context 메뉴로 등록

registerForContextMenu(listview);

}

//Context 메뉴로 등록한 View(여기서는 ListView)가 처음 클릭되어 만들어질 때 호출되는 메소드

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

// TODO Auto-generated method stub

//res폴더의 menu플더안에 xml로 MenuItem추가하기.

//mainmenu.xml 파일을 java 객체로 인플레이트(inflate)해서 menu객체에 추가

getMenuInflater().inflate(R.menu.menu_listview, menu);

super.onCreateContextMenu(menu, v, menuInfo);

}

//Context 메뉴로 등록한 View(여기서는 ListView)가 클릭되었을 때 자동으로 호출되는 메소드

public boolean onContextItemSelected(MenuItem item) {

//AdapterContextMenuInfo

//AdapterView가 onCreateContextMenu할때의 추가적인 menu 정보를 관리하는 클래스

//ContextMenu로 등록된 AdapterView(여기서는 Listview)의 선택된 항목에 대한 정보를 관리하는 클래스

AdapterContextMenuInfo info= (AdapterContextMenuInfo)item.getMenuInfo();

int index= info.position; //AdapterView안에서 ContextMenu를 보여즈는 항목의 위치

//선택된 ContextMenu의  아이템아이디를 구별하여 원하는 작업 수행

//예제에서는 선택된 ListView의 항목(String 문자열) data와 해당 메뉴이름을 출력함

switch( item.getItemId() ){

case R.id.modify:

Toast.makeText(this, mDatas.get(index)+" Modify", Toast.LENGTH_SHORT).show();

break;

case R.id.delete:

Toast.makeText(this, mDatas.get(index)+" Delete", Toast.LENGTH_SHORT).show();

break;

case R.id.info:

Toast.makeText(this, mDatas.get(index)+" Info", Toast.LENGTH_SHORT).show();

break;

}

return true;

};

//ListView의 아이템 하나가 클릭되는 것을 감지하는 Listener객체 생성 (Button의 OnClickListener와 같은 역할)

OnItemClickListener listener= new OnItemClickListener() {

//ListView의 아이템 중 하나가 클릭될 때 호출되는 메소드

//첫번째 파라미터 : 클릭된 아이템을 보여주고 있는 AdapterView 객체(여기서는 ListView객체)

//두번째 파라미터 : 클릭된 아이템 뷰

//세번째 파라미터 : 클릭된 아이템의 위치(ListView이 첫번째 아이템(가장위쪽)부터 차례대로 0,1,2,3.....)

//네번재 파리미터 : 클릭된 아이템의 아이디(특별한 설정이 없다면 세번째 파라이터인 position과 같은 값)

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

// TODO Auto-generated method stub

//클릭된 아이템의 위치를 이용하여 데이터인 문자열을 Toast로 출력

Toast.makeText(MainActivity.this, mDatas.get(position), Toast.LENGTH_SHORT).show();

}

};

}





출처: http://kitesoft.tistory.com/68 [안드로이드 어플 개발]

반응형

+ Recent posts