2015-11-27

menggunakan library native

menggunakan library native yang sudah tertanam di handset, dengan menggunakan library-library native yang tersedia di handset.
dengan menggunakan adb shell, liat isi library yang ada di /system/lib, untuk contoh kita akan menggunakan libcurl.so, curl adalah library untuk get/post http, langkah-langkahnya sebagai berikut:


  1. copy libcurl.so dari handset ke komputer, contoh kita akan simpan *.so itu di dalam folder prebuilt/lb

    adb pull /system/lib/libcurl.so prebuilt/lib

  2. cari include-include file library yang kita akan pakai, dalam hal ini include culr, bisa di download dari source-nya http://curl.haxx.se/download.html
  3. edit android.mk sebagai berikut

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := libcurl
    LOCAL_SRC_FILES = $(LOCAL_PATH)/prebuilt/lib/libcurl.so
    include $(PREBUILT_SHARED_LIBRARY)

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/curl/include LOCAL_MODULE    := foo LOCAL_SRC_FILES := curltest.c \ LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lz LOCAL_SHARED_LIBRARIES := libcurl
    include $(BUILD_SHARED_LIBRARY)

  4. 4. ndk-build, jika semuanya berjalan sukses, maka di folder libs akan ada libfoo.so dan libcurl.so

2015-11-26

SparseArray

Keluarga SpareArray: SparseArray (int), LongSparseArray merupakan HashMap dengan key-nya native: int, long. Kelebihan sparsearray dibandingkan dengan HashMap adalah tidak adanya prosess boxing-unboxing dari dan ke native variable

misal:

HashMap<int,String> map1 = new HashMap<int,String>()
map1.put(1,"satu");
String value = map1.get(1);

yang sebenarnyanya terjadi adalah sebagai berikut:
map1.put(new Integer(1),"satu");
String value = map1.get(new Integer(1));

nah disana ada proses boxing/unboxing dari int ke Integer, nah dengan menggunakan SpareArray prosess boxing/unboxing itu tidak ada karena key-nya sudah tersimpan dalan native variable

SparseArray<String> map2 = SparseArray<String>();
map2.put(1,"satu");
String value = map2.get(1);

Perlu diketahui proses pembuatan class itu prosses yang berat karena disana bisa memanggil System.gc()

Disamping itu ada beberapa feature tambahan dari sparsearray:
1. keyAt(int index), mendapatkan key pada index tertentu
2. valueAt(int index), mendapatkan value pada index tertentu
3. indexOfKey(int key), index dari key
4. indexOfValue(E value), index dari value



2015-11-24

Build openssl for Android

adakalanya kita perlu membuat native android applikasi dengan menggunakan NDK, dan membutuhkan library openssl didalamnnya, berikut langkah untuk membuild openssl di project
Anda

pre request:
NDK sudah terinstall

1. download source openssl dari https://www.openssl.org
2. download script build-all-arch.sh dan setenv-android.mod.sh dari https://github.com/stdchpie/android-openssl
3. chmod +x build-all-arch.sh setenv-android.mod.sh
4. $./build-all-arch.sh

jika sequa berjalan normal make libcrypt.so dan libssl.so ada di folder prebuilt/$arch/, jika Anda membutuhkan static library *.a make sedikit edit script build-all-arch.sh pas cp cp libcrypto.so

untuk menambahkan di project anda

tambahkan di file android.mk

include $(CLEAR_VARS)
LOCAL_MODULE := libcrypto
ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := prebuilt/arm64-v8a/libcrypto.a
else
LOCAL_SRC_FILES := prebuilt/armeabi/libcrypto.a
endif
include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE := libssl
ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES :=prebuilt/arm64-v8a/libssl.a
else
LOCAL_SRC_FILES :=prebuilt/armeabi/libssl.a
endif
include $(PREBUILT_STATIC_LIBRARY)