2016년 11월 2일 수요일

[Android] 파일 타입을 잘못지정해서 만들었다면?


파일을 생성하다보면, 간혹 파일타입을 잘못 지정해서 만드는 경우가 있는데,
이때, 해당 파일명으로 만들면 무조건, 아이콘이 처음 지정한 아이콘으로 표시된다.
xml파일을 만들어야 하는데, java 파일타입으로 지정해버리면 xml 디자인을 할수가 없다.

> 해결
Settings - Editor - File Types 메뉴에서 실수로 지정된 타입을 찾아보면
아까 잘못 지정한 파일명이 보인다. 리스트에서 "오른쪽빨간색 - 누름" 삭제 해준다.




2016년 5월 25일 수요일

[Android] Cross Compile

# 안드로이드 크로스 컴파일에 관해서

안드로이드에서 사용하는 크로스 컴파일러는
arm-linux-androideabi-gcc

apt-get install androideabi 를 이용해서 받을 수 있다.

android 컴파일러의 경우, bionic C를 사용하며, linker를
리눅스의 ld-linux.so 를 사용하는 것이아니라, linker를 사용한다.
--> 그렇기때문에 x86리눅스에서 컴파일된 파일은 ld-linux.so 에러를 보이며,
수많은 인터넷에 떠돌아다니는 x86프로그램들을 안드로이드에서 실행불가한 이유다.

readelf명령어로 컴파일된 파일을 확인해보면 linker부분을 확인할 수 있다.

기본적으로 arm-linux-eabi-gcc와 arm-linux-androideabi-gcc의 차이는
이 linker가 자동으로 설정 되느냐 안되느냐이다.

""와 hf 컴파일러가 다른데, 안드로이드의 경우 보통 ""를 사용하는 것으로 보인다.
> soft float, hard float
> arm-linux-androideabi-gcc의 경우 soft-float가 기본으로 되는 것으로 보임


컴파일러 옵션을 살펴보면, 다음과 같다.
눈여겨 봐야할 부분은 --with-float=soft 부분.. soft는 ""란 이야기.. hard는 hard-float를 지원한다는 이야기이다.

# arm-linux-androideabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-androideabi-gcc
COLLECT_LTO_WRAPPER=/Prj/toolchain/bin/../libexec/gcc/arm-linux-androideabi/4.8/lto-wrapper
Target: arm-linux-androideabi
Configured with: /s/ndk-toolchain/src/build/../gcc/gcc-4.8/configure --prefix=/tmp/ndk-andrewhsieh/build/toolchain/prefix --target=arm-linux-androideabi --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/tmp/ndk-andrewhsieh/build/toolchain/temp-install --with-mpfr=/tmp/ndk-andrewhsieh/build/toolchain/temp-install --with-mpc=/tmp/ndk-andrewhsieh/build/toolchain/temp-install --with-cloog=/tmp/ndk-andrewhsieh/build/toolchain/temp-install --with-isl=/tmp/ndk-andrewhsieh/build/toolchain/temp-install --with-ppl=/tmp/ndk-andrewhsieh/build/toolchain/temp-install --disable-ppl-version-check --disable-cloog-version-check --disable-isl-version-check --enable-cloog-backend=isl --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --disable-libitm --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --enable-initfini-array --disable-nls --prefix=/tmp/ndk-andrewhsieh/build/toolchain/prefix --with-sysroot=/tmp/ndk-andrewhsieh/build/toolchain/prefix/sysroot --with-binutils-version=2.25 --with-mpfr-version=3.1.1 --with-mpc-version=1.0.1 --with-gmp-version=5.0.5 --with-gcc-version=4.8 --with-gdb-version=7.7 --with-python=/usr/local/google/home/andrewhsieh/mydroid/ndk/prebuilt/linux-x86_64/bin/python-config.sh --with-gxx-include-dir=/tmp/ndk-andrewhsieh/build/toolchain/prefix/include/c++/4.8 --with-bugurl=http://source.android.com/source/report-bugs.html --enable-languages=c,c++ --disable-bootstrap --enable-plugins --enable-libgomp --enable-gnu-indirect-function --disable-libsanitizer --enable-gold --enable-threads --enable-graphite=yes --with-cloog-version=0.18.0 --with-isl-version=0.11.1 --enable-eh-frame-hdr-for-static --with-arch=armv5te --program-transform-name='s&^&arm-linux-androideabi-&' --enable-gold=default
Thread model: posix
gcc version 4.8 (GCC)


# 안드로이드에서 사용하기위해 컴파일을 했으나 segmentation  fault가 나는 경우.
readelf로 파일을 확인하면, linker는 제대로 들어갔으나, segmentation fault가 나오는경우가 있다.






2016년 3월 16일 수요일

[Android] Android Studio에서 난독화 하기

Android Studio에서 난독화 하기 ( Proguard )



1. 설정하기.
 build.gradle에서 난독화 설정을 할 수 있다.


buildTypes {
    debug {
 signingConfig signingConfigs.debug
 minifyEnabled false     zipAlignEnabled true     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}

2016년 1월 21일 목요일

[Android] OpenPrinting.

1. Samsung Printer
 - SPL ( Samsung Printer Language ) 사용 .  최신 버전 Ver5.
 - 삼성 프린터 드라이버 홈페이지에서 uld 드라이버를 다운로드받게 되면,
   linux, armv5le 버전의 rastertospl filter를 사용할 수 있다.
 - but.. 안드로이드의 경우 armv7l + /usr/bin/linker를 사용해서 쓸 수가 없었다.
 - Linker를 변경하는 방법이 있나.?? 기본적으로 ld-linux.so.3를 사용했음.

1.1. SPL Open Printing.
- Splix Driver : Linux/ Other Arch에서 사용하기 위해서 반드시 필요한 드라이버다.
                         cups용 filter를 제공하고 있다.
                         raster2qpdl 을 사용하거나, ps2qpdl을 사용할 수 있다.
                         raster2qpdl을 사용하려면, cups raster로 변환과정이 필요하고, gs필요
                         ps2qpdl을 사용하려면.. ps2gs 또는 pdf2ps등이 필요하며 내부적으로
                         gs를 사용하고 있어서 gs ( ghostscript ) 가 필요하다.

2. ZJS ( HP 보급형 Emulation )
- HP는 기본적으로 PCL을 지원하는 것으로 알고있는데, 보급형은 ZJS를 지원한다.
- 보급형도 PCL을 지원하면 좋을텐데 왜 지원을 하지 않는지 모르겠다.

3. Canon 지원
- GutenPrinting 드라이버 사용하면 된다.



2016년 1월 12일 화요일

[Android/Java] 외부 실행파일 사용하기.


프로그램하다보면, 실행파일을 이용해야할 때가 있다..

이때, ProcessBuilder를 사용할 수 있는데, 다음과 같이 ArrayList로 각각의 인자를 add한다.
만약 -page A4 라는 옵션을 넣어야 한다면 "-page" 와 "A4"를 각각 add하도록 해야 동작함.

 List cmd = new ArrayList();
cmd.add("java");
cmd.add("-classpath");
cmd.add("\"d:/workspace/some project/lib/something.jar\"");
cmd.add("blah.blah.SomeClass");
cmd.add("arg1");
cmd.add("arg2");
ProcessBuilder bld = new ProcessBuilder(cmd);
bld.directory(new File("d:/workspace/some project"));
bld.start();

출처 : http://egloos.zum.com/lempel/v/10961361
 
관련 참고 : http://jh-note.blogspot.kr/2012/01/java-15-processbuilder.html
  https://bugs.launchpad.net/ubuntu/+source/udev/+bug/18979
http://developer.oesf.biz/em/developer/