2015-01-22 2 views

답변

1

Android 용 응용 프로그램 통합 용 이 튜토리얼에서는 Android 용 SQLCipher의 바이너리를 Android 응용 프로그램에 통합하는 방법을 다룹니다. 이 튜토리얼에서는 Android SDK가 로컬 개발 컴퓨터에 이미 설치되어 있다고 가정합니다.

다음 명령을 발행 샘플 안드로이드 응용 프로그램을 만들려면 샘플 안드로이드 응용 프로그램 만들기 : 안드로이드에 대한 SQLCipher의 소스 코드가 공개 Github.com에 유지

% mkdir demo-app 
% cd demo-app 
% android create project \ 
    --target android-10 \ 
    --name demoapp \ 
    --path . \ 
    --activity HelloSQLCipherActivity \ 
    --package com.demo.sqlcipher 

얻기 바이너리를, 현재 바이너리 릴리스 여기에서 찾을 수 있습니다. Android 용 SQLCipher 소스 작성에 대한 자세한 내용은 아래 지침을 참조하십시오. 우리는 수동으로 다운로드하고 아래의 명령을 사용하여 응용 프로그램 루트 디렉토리에 압축 된 tar 파일의 내용을 추출합니다 :

% curl -L -o sqlcipher-for-android.zip https://s3.amazonaws.com/sqlcipher/SQLCipher+for+Android+v3.1.0.zip 
% unzip sqlcipher-for-android.zip 

우리는 우리의 응용 프로그램의 루트 디렉토리에 다양한 라이브러리와 자산 파일을 통해 복사해야합니다. 다음 명령을 실행 데모 응용 프로그램에 대한

% cp -R SQLCipher\ for\ Android\ v3.1.0/libs/* libs 
% cp -R SQLCipher\ for\ Android\ v3.1.0/libs/*assets 

파일이 구조 유사하게 나타납니다

enter image description here

통합 시작 이클립스와 choose File -> New -> Android Project을 메뉴에서. 프로젝트 이름을 지정하고 응용 프로그램 루트 디렉토리를 가리키는 기존 소스에서 프로젝트 작성을 선택하십시오. 다음과 유사해야합니다. enter image description here

다음은 libs 디렉토리에있는 3 개의 jar 파일을 참조해야합니다. 패키지 탐색기에서 프로젝트 노드를 마우스 오른쪽 버튼으로 클릭하고 Build Path -> "Configure Build Path..."을 선택하십시오. Libraries 탭을 선택하고 "Add JARs..." 버튼을 누릅니다. commons-codec.jar, guava-r09.jar and sqlcipher.jar을 선택하십시오. 이 세 항아리를 선택한 후, 화면은 다음과 같이 나타납니다 :

enter image description here

다음으로 우리가 제대로 SQLCipher에 대한 네이티브 라이브러리를 초기화하는 기본 활동의 소스를 수정 한 다음 레코드를 삽입하는 우리의 데이터베이스 파일을 생성합니다. 특히 android.database.sqlite.SQLiteDatabase 대신 net.sqlcipher.database.SQLiteDatabase의 가져 오기와 SQLiteDatabase.loadLibs(this)을 호출해야합니다. 다른 데이터베이스 작업을 수행하기 전에 SQLiteDatabase.loadLibs(this)을 호출해야합니다.

package com.demo.sqlcipher; 

import java.io.File; 
import net.sqlcipher.database.SQLiteDatabase; 
import android.app.Activity; 
import android.os.Bundle; 

public class HelloSQLCipherActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     InitializeSQLCipher(); 
    } 

    private void InitializeSQLCipher() { 
     SQLiteDatabase.loadLibs(this); 
     File databaseFile = getDatabasePath("demo.db"); 
     databaseFile.mkdirs(); 
     databaseFile.delete(); 
     SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "test123", null); 
     database.execSQL("create table t1(a, b)"); 
     database.execSQL("insert into t1(a, b) values(?, ?)", new Object[]{"one for the money", 
                     "two for the show"}); 
    } 
} 

이제 샘플 응용 프로그램을 에뮬레이터 또는 장치에서 실행할 수 있어야합니다. 안드로이드에 대한

SQLCipher 처음부터 안드로이드 SQLCipher의 소스 코드를 작성 다룰 것

이 튜토리얼 튜토리얼을 구축 할 수 있습니다. 이 튜토리얼은 Android NDK의 개정판 7을 대상으로하며 Linux 또는 OSX 환경에서 복잡한 문제를 해결하기위한 것입니다.

시스템 환경 요구 사항 Android 용 SQLCipher 소스를 빌드하려면 여러 가지 도구가 필요합니다. 빌드 머신에는 Android SDK, Android NDK and the JDK을 비롯한 여러 개발 키트가 있어야합니다. PATH에서 사용할 수있는 ANDROID_NDK_ROOT 환경 변수가 필요합니다. 소스 트리를 얻으려면 Git이 필요할 것이다. 당신의 PATH가 제대로 구성을 확인하려면 다음 명령을 실행 : 당신은 NDK 빌드 당신은 당신의 .bashrc 또는 해당 쉘 설정 파일에 다음을 추가 할 필요가 발견되지 수신하는 경우

% which ndk-build 
/Users/nparker/bin/android-ndk/ndk-build 

. ~/bin/android-ndk 경로 아래의 안드로이드 NDK의 루트 디렉토리 내 컴퓨터의 위치를 ​​나타냅니다, 그에 따라 조정 :

export ANDROID_NDK_ROOT=~/bin/android-ndk 
export PATH=$ANDROID_NDK_ROOT:$PATH 

우리는 NDK 툴체인과 상호 작용에 대한 우리의 기본 빌드 도구로 확인 사용합니다.

소스

안드로이드에 대한 SQLCipher의 소스 코드가 Github.com에 공개적으로 유지를 가져옵니다. 우리는 로컬 저장소를 복제하여 시작합니다 :

% cd ~/code 
% git clone git://github.com/sqlcipher/android-database-sqlcipher.git 

코드를 작성하는 과정은 두 가지 단계로 나뉩니다 구축. 이것이 처음 수행 될 때 우리는 안드로이드 용 SQLCipher가 의존하는 다양한 자식 서브 모듈을 초기화해야합니다. 이것은 모두 Make를 통해 자동화됩니다. 자식 컴파일에 필요한 다양한 서브 모듈을 아래로 당겨 완료되면

% cd android-database-sqlcipher 
% make init 

, 우리는 빌드 프로세스를 시작할 수 있습니다 :

퍼센트이 프로세스를 완료하는 데 시간이 좀 걸릴 것 합니다. 이 완료되면, 당신은 응용 프로그램의 libs와 디렉토리에 통합에 사용할 수있는 다음과 같은 파일이 있어야합니다

% tree libs 
libs 
├── armeabi 
│ ├── libdatabase_sqlcipher.so 
│ ├── libsqlcipher_android.so 
│ └── libstlport_shared.so 
├── commons-codec.jar 
├── guava-r09.jar 
└── sqlcipher.jar 

현지화 종속성

안드로이드에 대한

SQLCipher 중환자 실 프로젝트에서 현지화 된 데이터에 따라 달라집니다. 안드로이드 용 SQLCipher는 가능한 경우 /system/usr/icu directory에있는 icudt46l.dat이라는 시스템 제공 ICU 현지화 데이터 파일을 사용하려고 시도합니다. 찾을 수 없으면 Android 용 SQLCipher가 응용 프로그램 자산 디렉토리에있는 icudt46l.zip 파일의 압축을 풀려고 시도합니다. 최적의 플랫폼 호환성을 위해 응용 프로그램에 icudt46.zip 파일을 포함시키는 것이 좋습니다.

참조 : 당신은 바이너리를 발견하는 방법 https://www.zetetic.net/sqlcipher/sqlcipher-for-android/

+0

이 정확히 규명 할 수 있습니까? 나는 당신이 "여기"에서 찾을 수 있다고 말하는 링크를 보지 못했고 Zetetic 페이지에서 바이너리 다운로드로 갈 때 나는 https://bintray.com/bintray/jcenter/net.zetetic%3Aandroid에서 바람을 다. -database-sqlcipher/3.3.1-2 /보기에 "이 패키지에 대해 직접 다운로드가 선택되지 않았습니다." 하나를 선택하는 방법을 알아낼 수 없습니다. – Michael

+0

btw, 링크가 3.1.0에서 훌륭하게 작동하지만, 순진하게 3.3.1 또는 3.3.1-2로 바꾸면 실패합니다. – Michael

관련 문제