레이블이 Android Studio인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android Studio인 게시물을 표시합니다. 모든 게시물 표시

2019년 8월 29일 목요일

Android Studio build error

  • java.lang.UnsatisfiedLinkError

Jni library를 추가 하거나, 빌드된 Library를 추가 했을 경우 아래와 같은 에러 발생
1. gradle.properties 파일  -> 아래 한 줄을 추가
   android.useDeprecatedNdk=true
2. app/build.gradle 파일 -> 아래 소스 추가
   defaultConfig {
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
        }
    }

  • GCM java.io.IOException: SERVICE_NOT_AVAILABLE

시스템 환경설정 시간을 자동으로 설정

  • More than one file was found with OS independent path 'lib/armeabi-v7a/libxxx.so' 
해당 모듈의 build.gradle 에 추가.

 
packagingOptions {
    pickFirst 'lib/arm64-v8a/*'
    pickFirst 'lib/armeabi-v7a/*' 
}
 

2017년 4월 26일 수요일

Android Studio Plugin

plugin 설치는 File -> Settings -> Plugins

1. BitBucket

Android Studio + BitBucket +Git 이용한 소스 관리 참고

2. Android API Level

간단히 api level 보여주는 plugin
Browser repositories -> "api level" 로 검색하여 설치

3. IdeaVim

vim emulating plugin
Browser repositories -> "ideavim" 으로 검색하여 설치


2017년 4월 21일 금요일

Android 개발 관련

Android 개발 관련 정리 및 Tip 모음.

1. signing key 확인

signing key 파일과 apk 가 같은 key 인지 확인할때 아래 명령어 사용

1.1 signing key fingerprint 확인
keytool -list -keystore xxx.jks

1.2 apk fingerprint 확인
keytool -list -printcert -jarfile xxx.apk

위 2가지의 fingerprint 같으면 동일한 key 로 서명이 된것임.

2. Log

Log 출력시, line, method name 포함하여 보여준다.
아래와 같은 식으로, level 별로 각각 만들면 됨.
LOGV_TAG 는 기존 로그와의 호환을 위해 사용.

Log.java

public class Log {
    public final static String TAG = "InputCommonTagName";

    public static final boolean LOGV = true;
    static final boolean LOGV_TAG = true;


    static int mLine=0;
    static String mName="";
    static String mPkg="";
    
    public static void v(String logMe) {
        if(LOGV) {
            StackTraceElement[] stack = (new Throwable()).getStackTrace();
            mLine = stack[1].getLineNumber();
            mName = stack[1].getMethodName();
            mPkg = stack[1].getFileName();
            android.util.Log.v(TAG, ""+mPkg+", "+mLine+" line, "+mName+"(), "+logMe);
        }
    }

    public static void v(String tag, String logMe) {
        if(LOGV_TAG) android.util.Log.v(tag, logMe);
    }
}


3. Live Templates 연동 (Android Studio)

File -> Settings -> Editor -> Live Templates -> AndroidLog

Add -> 적당한 이름 추가.






3-1. method 에 parameter 같이 출력하기.

3-1-1. android.util.Log 사용시

Template text :

Log.d("TAG_NAME", "$CLASS_NAME$ : $METHOD_NAME$()" : $content$);

$content$ 에 대한 Edit variables 작성 (그림 참고)

groovyScript("def params = _3.collect {it + ' = [\" + ' + it + ' + \"]'}.join(', '); return '\"' + _1 + ' : ' + _2 + '()' + (params.empty ? '' : ' : ' + params) + '\"'", className(), methodName(), methodParameters())


3-1-2. 2번의 Log 사용시

Log.d($content$);

groovyScript("def params = _1.collect {it + '=\"+'+it}.join('+ \"'); return '\"' + (params.empty ? '' : params)", methodParameters())

or

groovyScript("def params = _1.collect {it + ' = [\" + ' + it + ' + \"]'}.join(', '); return '\"' + (params.empty ? '' : params) + '\"'", methodParameters())


3-2. return value 같이 출력하기

3-2-1. android.util.Log 사용시

Template text :

Log.d("TAG_NAME", "$CLASS_NAME$ : $METHOD_NAME$() returned: " + $result$);

$content$ 에 대한 Edit variables 작성 (그림 참고)

variableOfType(methodReturnType())


3-2-2. 2번의 Log 사용시

Log.d("returned : $result$=" +  $result$);

$result$ 에 대한 Edit variables 작성
variableOfType(methodReturnType())


2016년 5월 24일 화요일

Android Gradle

asserts 폴더에서 필요한 파일만 포함하여 apk 만들기

productFlavors 와 sourceSets 을 조합
 
productFlavors {
    ABC {
    }

    DEF {
    }
}
 
sourceSets {
    ABC {
        assets.srcDirs = ['src/main/assetsABC']
    }

    DEF {
        assets.srcDirs = ['src/main/assetsDEF']
    }
}
 
 
 

2015년 7월 23일 목요일

Eclipse Project -> Android Studio Migration

이클립스로 개발했던 프로젝트를 Android Studio 로 migration 하면서 알게된 Tip 정리.
module 의 build.gradle 에 추가.

1. dependency 설정

dependencies {
    compile files('libsFolderName/name.jar')
    //compile fileTree(dir: 'libs', include: ['*.jar'])
}




2. android.jar 보다 먼저 참조시키기

Xbootclasspath 설정

-Xbootclasspath/p:"Module Name"/"jar path"

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs.add('-Xbootclasspath/p:app/libs/xxx.jar')
    }
}
cf> Xbootclasspath 에 대한 상세 설명은 아래 링크 참조
-Xbootclasspath/p:path
디렉토리, JAR 어카이브(archive), 및 ZIP 어카이브(archive)의 패스를 세미콜론으로 단락지어 지정.
패스는 디폴트의 bootstrap 클래스 패스전에 추가됨.
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html
http://java.ihoney.pe.kr/27

3. 외부 class 파일이나 so 추가시 jar 로 변환(?) 후 참조하기

(참조 : stackoverflow.com)
task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
    destinationDir file("libs") // jar 로 압축된 파일이 저장될 폴더 위치
    baseName 'name'  // jar 로 압축할 파일 이름 (위 dependencies 에서 사용될 name.jar)
    extension 'jar'  // 확장자 이름
    from fileTree(dir: 'ExtClass', include: '**/*.class')  //가져올 원본 class or so 파일
    //into 'lib/'  // jar로 압축하면서 만들 추가 폴더 이름. android class 파일들은 지정안하는게 나음.
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}






4. 빌드시 제외시키고자 할 경우

android {
    ... ...
    sourceSets {
        main {
            java {
                exclude '**/name.java' 
            }
        }
    }
}



5. 빌드후 apk 이름 변경시키기

defaultConfig {
    project.ext.set("archivesBaseName", "name");
}

6. 서명키

프로젝트 최상위 경로에 gradle.properties 파일 생성하여 아래 항목 작성
keystore=jks path
keystore_pass=xxx
key_alias=xxx
key_pass=xxx

build.gradle 에서 사용
signingConfigs {
    releaseWithProps {
        storeFile file(keystore)
        storePassword keystore_pass
        keyAlias key_alias
        keyPassword key_pass
    }
}






7. migration 후 빌드까지 정상적으로 되었으나 실행시 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 에러 발생할 경우

package 명에 대문자가 있을 경우 소문자로 변경후 clean 빌드하면 정상 동작한다.
Android Studio 에서 package rename 하는 방법은,
프로젝트 탭의 설정 아이콘 선택 -> "Compact Empty Middle Packages" uncheck -> 변경하고자 하는 폴더에서 마우스 우클릭 -> Refactor -> Rename 실행.




8. file encoding

한글 오류 발생할 경우,
해당 파일 -> 메뉴 -> File -> file encoding 선택 -> x-window-949 선택 -> reload
-> 다시 메뉴 반복 file enconding 선택 -> utf-8 선택 -> convert



9. framework debugging

해당 소스 파일을 SDK\soruces\해당버전에 위치시킴





2014년 8월 4일 월요일

Android Studio 오류 해결 Tip



1. Android Studio 설치후 실행시 아래와 같은 에러 발생시


환경설정의 JAVA_HOME 확인후 이상없을 경우는 vmoptions 변경.

Failed to create JVM: error code -4
JVM Path: C:\Program Files\Java\jdk1.7.0_45\jre
If you already have a 32-bit JDK installed, define a JAVA_HOME variable in Computer > System Properties > System Settings > Environment Variables.

C:\Program Files\Android\android-studio\bin\studio.exe.vmoptions
위 파일의 내용을 아래와 같이 변경.
-Xmx512m  -> 256m
-XX:MaxPermSize=250m  -> 128m

2. 윈도우 xp 에서 실행시 splash 이미지만 뜬후 실행되지 않을경우

(특히 android studio update 이후 발생)
vmoptions 수정

-Xms256m -> -Xmx256m
-Xms750m -> -Xmx256m

3. Design Preview 로딩중 상태에서 멈출 경우

clean - rebuild - Invalidate Cacheds/Restart 실행

4. Android ClassNotFoundException: Didn't find class "class name" on path ~ 오류

이미 설치되어 있는 aosp 를 reinstall 할때 주로 발생하였다.
build.gradle 에 "multiDexEnabled true" 로 되어 있는지 확인
없다면, false 로 명시해주자.
보통은 multiDex 관련 에러이나, 다른 원인에 의해 발생할수도 있는것 같다.


5. xml 상에서 "cannot find symbol ?attr/actionBarSize" 등의 오류 발생 (빌드는 잘됨)
  1) close project -> 새로 import projcet 해라
  2) 1 을 해서 안된다면, gradlew cleanBuildCache 해보자
  3) 2 를 해서 안된다면, buildtoolvesion 과 support library 를 최신으로 설정


안드로이드(Android) 16 소개

    안드로이드 16이 드디어 출시되었어요!  🎉 이번 포스팅에서는 안드로이드 16의 다양한 기능과 장점에 대해 자세히 알아보도록 할게요.  1. 안드로이드 16 소개 안드로이드 16은 구글의 모바일 운영 체제인 안드로이드의 최신 버전으로, 많은 ...