Android 안드로이드2017. 9. 1. 22:57

Error:Execution failed for task ':app:processDebugGoogleServices'. No matching client found for package name 'com.example.myapplication'


기존 사용했던 앱을 가져와서 패키지 리팩토링을 했다.


컴파일을 했더니 에러가 나왔고 이 해결책은.


파이어베이스 설정 페이지( https://firebase.google.com/docs/android/setup )를 참고해서 역으로 파이어배이스와 관련된 코드를 build.gradle에서 삭제했다.


추후 앱을 완성하고 파이어베이스 코드를 새로 추가한다.

Posted by 코드버무려
Android 안드로이드2017. 4. 20. 22:20

구글 클라우드 메세지

GCM(google Cloud Message)가 FCM(Firebase cloud message)로 업그레이드되었다.

푸쉬노티피케이션(Push Notification)을 구현하는 예제를 받았더니 컴파일이 안되는 사태가 벌어졌다.

안드로이드 SDK를 다시 받고 안드로이드 스튜디오를 지우고 다시 설치하고 다소 과소해서

작은 시간을 보냈다. 그래도 똑같은 에러를 뿜으면서 컴파일 초입에 에러가 나왔다.


적잖은 시간을 흘려보내고 단위는 날이다 프로젝트를 만들고 예제를 보면서 코드를 만들었다.



MoveCode4FCM.zip





Posted by 코드버무려
Android 안드로이드2017. 3. 28. 22:51

옵션메뉴를 보통 이렇게 구성한다.


기존에는 기만들어 놓은 소스를 꺼내와 압축을 풀고 해당 액티비티에서 아래 소스를 찾아 지금 진행 중인 프로젝트에 붙여넣기 했다. 


다양한 앱 제작을 진행하면서 그 형식이 대부분 바뀜없이 여기서 시작한다. 앞으로 예전 소스보다는 바로 아래에서 그대러 긁어 가져가서 진행 속도를 높이려고 한다.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
if(IsDebugging) Log.d(TAG, "onCreateOptionsMenu()");
return true;
}

PackageInfo getPackageInfo() {
PackageInfo pinfo = null;
try {
pinfo = getPackageManager().getPackageInfo(getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return pinfo;
}

public boolean onPrepareOptionsMenu(Menu menu) {
if(IsDebugging) Log.d(TAG, "onPrepareOptionsMenu()");

menu.clear();
PackageInfo pinfo = getPackageInfo();
int versionCode = pinfo.versionCode;
String versionName = pinfo.versionName;

Resources res = getResources();
String text = String.format(
res.getString(R.string.about), versionName,
50 - versionCode >= 0 ? 50 - versionCode : versionCode - 50);

menu.add(0, Menu.FIRST , 0, text);
menu.add(0, Menu.FIRST +1, 0, "mIsBackButton=" +mIsBackButton);
return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(IsDebugging) Log.d(TAG, "onOptionsItemSelected()");
switch (item.getItemId()) {
case Menu.FIRST:
return true;
case Menu.FIRST + 1:
mIsBackButton = !mIsBackButton;
if(IsDebugging) Log.d(TAG, "mIsBackButton = " +mIsBackButton);
if(IsDebugging) Toast.makeText(this, "mIsBackButton = " +mIsBackButton, Toast.LENGTH_SHORT).show();
invalidateOptionsMenu();
return true;
}
return super.onOptionsItemSelected(item);
}



Posted by 코드버무려
Android 안드로이드2016. 11. 8. 15:35

웹뷰에서 URL링크 클릭할 때 외부 브라우져를 검색하는 선택 대화상자가 뜬다.

이 것을 막으려면 어떻게 해야할까?


"shouldOverrideUrlLoading()를 두고 true를 리턴하면 된다"라고 많은 문서에서 잘 못 설명하고 있다.

setWebViewClient(new WebViewClient()); 한줄이면 끝이다. 더는 대화상자 나오지 않는다.


그럼 shouldOverrideUrlLoadig()는 뭘까?

우선 setWebViewClient(new OrginWebViewClient());와 같이 WebViewClient를 상속한 객체를 등록해준다.


명확하게 설명해주는 블로그나 사이트가 없다시피했다. 그래서 shouldOverrideUrlLoading API문서를 수차례 읽고 테스트하고 읽고를 반복했다. 수차례라고 하지만 며칠 보냈다. 그도 그럴것이 정확히 이해를 못하면 이 동작이나 저동작이 다 비슷해 보인다. 클레스 WebChromeClient과 클레스 WebViewClient 동작이 얼핏 비슷비슷하다.


shouldOverrideUrlLoading::

https://developer.android.com/reference/android/webkit/WebViewClient.html


정확히 짧게 설명한다.

shouldOverrideUrlLoading() 역할은 return 값으로 링크를 어떻게 처리할 까를 결정한다. true를 리턴하면 웹뷰를 포함하고 있는 앱이 처리한다. (위 API 레퍼런스에서) 호스트라고 일컷는 것이다. 쉽게 말해 내가 지금 만들고 있는 앱(== 호스트)이다. 더 파고 내려가면 해당 웹뷰를 보여주는 Activity(=== host)가 된다. false를 리턴하면 지금 WebView가 처리한다이다.


이 문구를 정확히 이해하면 그 다음은 고속도로이다.


  public class OrginWebViewClient extends WebViewClient {


  // rurl

  // shouldOverrideUrlLoading()함수를

        @SuppressWarnings("deprecation")

        @Override

        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            if(IsDebugging) Log.d(TAG, ":: shouldOverrideUrlLoading(WebView view, String url)");

            view.loadUrl(url);

            return true;

        }


        @TargetApi(Build.VERSION_CODES.LOLLIPOP)

        @Override

        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

            if(IsDebugging) Log.d(TAG, ":: shouldOverrideUrlLoading(WebView view, WebResourceRequest request)");

            final Uri uri = request.getUrl();

            final String host = uri.getHost();

            final String scheme = uri.getScheme();

            view.loadUrl(uri.toString());

            return true;

        }


        @Override

        public void onPageStarted(WebView view, String url, Bitmap favicon) {

            if(IsDebugging) Log.d(TAG, "onPageStarted()");

            super.onPageStarted(view, url, favicon);

        }

    }



참고:

http://stackoverflow.com/questions/36484074/is-shouldoverrideurlloading-really-deprecated-what-can-i-use-instead

http://stackoverflow.com/questions/27009995/android-webview-links-to-same-window-with-target-blank-to-open-new-window

Posted by 코드버무려
Android 안드로이드2016. 10. 29. 15:15


안드로이드스튜디오 1.5.2를 사용 중이다. 언젠가 최신 SDK로 업데이트를 했다.

새로운 프로젝트를 만들고 컴파일을 했고 평소에는 당연하게 나오던 결과가 없었다.앱이 뜨다가 멈추고 에로를 토해냈다. 

FATAL EXCEPTION: main Process: com.jkrtscrptstdy.tstrun, PID: 9097 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapplication.tstrun/com.myapplication.MainActivity}: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2252) at android.app.ActivityThread.access$800(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat. at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:723) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190) at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:77) at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:127) at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147) at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27) at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:50) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:181) at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:521) at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71) at com.myapplication.MainActivity.onCreate(MainActivity.java:16) at android.app.Activity.performCreate(Activity.java:5275) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2166) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2252)  at android.app.ActivityThread.access$800(ActivityThread.java:139)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5103)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)  at dalvik.system.NativeStart.main(Native Method) 


java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.

평소에 못 보던 에러였다.

벡터Drawable를 본격 사용하는 안드로이드 7.xxx 누가 SDK로 업하고 나오는 에러가 아닌가..???? 생각된다.


Gradle plugin 2.0 이전 버젼을 사용하는 것이라 해결책은 아래 두 가지를 추가하면 된다. 

defaultConfig {
....

generatedDensities = []
}


aaptOptions {
additionalParameters "--no-version-vectors"
}


최종 build.gradle는 아래와 같다.

apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
applicationId "com.myapplication"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0000"

generatedDensities = []
}

aaptOptions {
additionalParameters "--no-version-vectors"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
}


참고: http://stackoverflow.com/questions/38143867/why-this-app-has-been-built-with-an-incorrect-configuration-error-occured-in-s




Posted by 코드버무려