AGP 8.x 이 필요해서 개발 툴을 업그레이드 했습니다.
업그레이드하면서 생긴 문제 및 수정 방법입니다.

 

1. 안드로이드 스튜디오 창이 확대되어 크게 보이는 현상

Android Studio Flamingo | 2022.2.1 를 쓰는데, 안드로이드스튜디오 창이 확대되어서 크게 보입니다.

 

 

위에 이미지가 정상적인것이고, 아래 이미지가 확대된 것입니다.


Help > Edit Custom Properties 를 선택하면 idea.properties 파일이 열립니다.
아래 설정을 넣어주고 안드로이드 스튜디오를 재시작해줍니다.

hidpi=false

 

안드로이드스튜디오 버전별 지원하는 AGP 버전은 아래에서 확인 가능합니다.

 

 

2. namespace 사용

 

build.gradle 파일에  namespace를 추가해 주어야 합니다.
applicationId와 같은 값을 지정해 주면 됩니다. AndroidManifest.xml 에서 android:package="com.example.myapp" 는 더 이상 사용하지 않습니다.

 

namespace "com.example.myapp"

 

3. BuildConfig 기본적으로 빌드 안함

BuildConfig 클래스가 자동적으로 생성되지 않게 바뀌었습니다.
빌드되도록 build.gradle 에 아래를 추가해주면 됩니다.

 

buildFeatures {
    buildConfig = true
}

 

관련 내용은 아래 링크를 참고 하시면 됩니다.

https://developer.android.com/build/releases/past-releases/agp-8-0-0-release-notes?hl=ko#default-changes

 

Android Gradle 플러그인 8.0.0 (2023년 4월)  |  Android Developers

Android Gradle 플러그인 8.0.0 출시 노트

developer.android.com

 

 

위에서 언급한 문제외에 다른 문제가 생긴다면 안드로이드 스튜디오에서 Tools > AGP Upgrade Assist.. 를 실행하여 해결할 수 있습니다.

 

728x90
반응형


aar 파일에서 proguard.txt 파일을 수정하는 방법입니다.


1. AAR 파일 추출 및 수정

  • AAR 파일은 기본적으로 ZIP 파일이므로 압축을 풀 수 있습니다.  extracted-folder 에 압축이 풀립니다.
unzip your-library.aar -d extracted-folder

 

2. proguard.txt 수정

  • extracted-folder 내에서 proguard.txt 파일을 찾아 수정합니다.

3. 수정한 AAR 파일 다시 패키징

  • 수정한 proguard.txt 파일을 포함하여 AAR 파일을 다시 생성합니다. extracted-folder 에서 아래 명령어를 실행합니다.

zip -r your-library-modified.aar *

 

4. 수정한 AAR 파일 프로젝트에 적용

  • 새로 만든 AAR 파일을 프로젝트에 적용합니다. 이 파일을 libs 폴더에 넣고, build.gradle에 다음과 같이 추가하여 사용할 수 있습니다.

dependencies {
    implementation files('libs/your-library-modified.aar')
}
728x90
반응형

 

Conscrypt

Conscrypt를 이용하면 Android 4.4(Kitkat)에서 최신 SSL/TLS 버전을 지원할 수 있습니다.

 

https://github.com/google/conscrypt

 

GitHub - google/conscrypt: Conscrypt is a Java Security Provider that implements parts of the Java Cryptography Extension and Ja

Conscrypt is a Java Security Provider that implements parts of the Java Cryptography Extension and Java Secure Socket Extension. - google/conscrypt

github.com

 

Conscrypt는 Android와 Java 환경에서 SSL/TLS 통신을 개선하고 성능을 최적화하기 위해 사용하는 오픈소스 라이브러리입니다. Conscrypt는 기본적으로 BoringSSL을 기반으로 하며, Java의 기본 SSL 구현체인 JSSE(Java Secure Socket Extension)보다 빠르고 안전한 SSL/TLS 기능을 제공합니다.

 

  1. BoringSSL 기반: Conscrypt는 Google의 BoringSSL 라이브러리를 기반으로 만들어졌습니다. BoringSSL은 OpenSSL의 포크로, 성능과 보안 향상을 위해 개발되었습니다. Android와 다른 Google 서비스에서는 이 라이브러리를 활용하여 더 나은 성능과 보안을 제공하려고 합니다.

  2. SSL/TLS 성능 최적화: Conscrypt는 기존의 Java SSL/TLS 구현체보다 빠른 성능을 제공합니다. 특히 Android 장치에서의 성능을 개선하기 위해 설계되었으며, 이를 통해 SSL 연결 및 암호화 처리에 드는 비용을 줄일 수 있습니다.

  3. 향상된 보안: Conscrypt는 보안 기능을 강화하여 최신의 암호화 기술과 프로토콜을 지원합니다. 또한, 취약점에 대응하기 위해 Google의 보안 팀에 의해 꾸준히 업데이트됩니다.

  4. OpenJDK와 호환성: Conscrypt는 Java 플랫폼에서도 사용할 수 있으며, 이를 통해 OpenJDK 기반의 시스템에서도 고성능의 SSL/TLS 처리를 제공합니다. Android에서도 주로 사용되지만, 일반적인 Java 애플리케이션에도 적용 가능합니다.

  5. 암호화 프로토콜 및 알고리즘 지원: Conscrypt는 최신 SSL/TLS 프로토콜을 지원하며, 이를 통해 클라이언트와 서버 간의 안전한 통신을 보장합니다. TLS 1.2, 1.3과 같은 최신 버전을 지원하며, RSA, ECDSA, AES 등의 강력한 암호화 알고리즘을 사용합니다.
반응형

Android에서 Conscrypt 사용하는 방법

build.gradle 에 추가

implementation 'org.conscrypt:conscrypt-android:2.5.1'

 

onCreate()에 추가

Security.insertProviderAt(Conscrypt.newProvider(), 1);

 

 

Conscrypt는 Android와 Java 환경에서 보안성 높은 SSL/TLS 연결을 제공하며, 성능 최적화와 보안 강화를 위해 사용되는 중요한 라이브러리입니다. 최신 암호화 기술을 제공하면서도 모바일 환경에 최적화되어 있기 때문에, Android 애플리케이션에서 네트워크 통신 시 매우 유용하게 사용할 수 있습니다.

728x90
반응형


행이 15만개 정도 되는 테이블에서 CHAR 타입으로 지정된 컬럼에 대해서 검색을 하는데 쿼리가 너무 느려서 사용한 방법입니다.

.....
16 rows in set (1.95 sec)

 

적용전에는 2초 가량 걸렸습니다. 

.....
16 rows in set (0.00 sec)


인덱스를 적용하니 거의 시간이 안 걸렸습니다. 


인덱스에는 두가지가 있습니다. 

 


1. 일반 인덱스 (Index)
- 일반 인덱스는 데이터 검색 속도를 높이기 위해 사용되며, 값의 중복을 허용합니다. 
- 예를 들어, 동일한 이름을 가진 여러 사용자가 있을 수 있으므로 이름 컬럼에 일반 인덱스를 추가할 수 있습니다. 

 CREATE INDEX index_name ON table_name(column_name);

2. 유니크 인덱스 (Unique Index)
- 유니크 인덱스는 인덱스 컬럼의 값이 고유해야 할 때 사용됩니다.
- 예를 들어, 사용자 테이블의 email 컬럼은 유니크 인덱스로 설정하여 중복된 이메일을 방지할 수 있습니다.

CREATE UNIQUE INDEX index_name ON table_name(column_name);


저는 중복된 값을 허용하는 일반 인덱스를 사용했습니다.

 

MySQL에서는 대부분의 데이터 타입에 인덱스를 설정할 수 있습니다.
다만 TEXT나 BLOB 같은 긴 문자열 타입은 부분 인덱스를 지정하는 것이 좋습니다.

Index 를 지정하면 쓰기 성능이 저하되기 때문에 쓰기가 많은 경우 신중하게 사용해야 합니다.

생성된 인덱스를 보려면 SHOW INDEX를 하면 됩니다.

 

SHOW INDEX FROM table_name;

 

인덱스를 삭제 하려면 DROP INDEX를 하시면 됩니다.

DROP INDEX index_name ON table_name;

 

 

 

728x90
반응형

 

1. Disable app 

PackageManager packageManager = getPackageManager();
packageManager.setApplicationEnabledSetting("com.package.name", PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, 0);


2. Enable app

PackageManager packageManager = getPackageManager();
packageManager.setApplicationEnabledSetting("com.package.name", PackageManager.PackageManager. COMPONENT_ENABLED_STATE_ENABLED, 0);


3. Restore previous status

PackageManager packageManager = getPackageManager();
packageManager.setApplicationEnabledSetting("com.package.name", PackageManager.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);

 

 

https://developer.android.com/reference/android/content/pm/PackageManager#setApplicationEnabledSetting(java.lang.String,%20int,%20int)

728x90
반응형

파일에서 한줄 읽기

BufferedReader br = new BufferedReader(new FileReader("/..../file"));
String tmp = br.readLine();
br.close();

파일에서 여러 줄 읽기

BufferedReader br = new BufferedReader(new FileReader("/..../file"));
String tmp;
while((tmp=br.readLine())!=null){
	
}
br.close();

파일에 쓰기

String tmp = "my file";
FileOutputStream out = new FileOutputStream("/..../path");
out.write(tmp.getBytes());
out.close();

파일 혹은 디렉토리가 있는지 확인하기

 File f = new File("/../path");
 if(f.exists()){
 	// 존재함
 }

파일 혹은 디렉토리인지 확인하기

File f = new File("/..../path");
if(f.isDirectory()){
	// 디렉토리
}
else if(f.isFile()){
	// 파일
}

파일 혹은 디렉토리 삭제하기

File f = new File("/...../path");
f.delete();

디렉토리 만들기

File f = new File("/...../path");
f.mkdir();
//f.mkdirs(); // 상위 디렉토리가 없을 경우 자동으로 생성해줌

 

728x90
반응형

ubuntu server 에서 *.pyc 파일을 실행할때 제대로 실행이 안될때는 binfmt-support 가 설치되어 있는지 확인해 보아야 한다.

없다면!

apt-get install binfmt-support


http://bytes.com/topic/python/answers/693692-trouble-executing-pyc-files-ubuntu-server


728x90
반응형

'프로그래밍 > Python' 카테고리의 다른 글

Python CGI on Apache  (0) 2012.01.30
Apache에서 Python을 쓰기 위해서는 mod-python을 설치해야 합니다. 우분투는 아래와 같이 설치합니다.

apt-get install libapache2-mod-python


/etc/apache2/httpd.conf에 아래와 같이 설정해줍니다.
/var/www/cgi/ 에 python cgi 파일들이 있다고 가정합니다.

<Directory "/var/www/cgi">
                AddHandler cgi-script .cgi
                AddHandler cgi-script .pyc
                AddHandler cgi-script .py
                 Allow from all
                Options +ExecCGI
</Directory>

이제 /var/www/index.py 에 아래와 같이 작성해줍니다.

#!/usr/bin/python

print "Content-Type: text/plain\n"
print "Hello, Python!"

파일에 실행 권한을 줍니다.

chmod a+x /var/www/index.py


http://ip/index.py 에 접속해보면 Hello, Python! 이 출력됨을 알 수 있습니다.
728x90
반응형

'프로그래밍 > Python' 카테고리의 다른 글

Problem running *.pyc on ubuntu server  (0) 2012.01.30

+ Recent posts