Android NDK Example


 

- source project : NdkExample.zip


1. make a new 'NdkExample' project under the 'ndk-root/apps' folder.


2. make a JNI java file(class) for wrapping.


public class NdkExample {
    static {
        System.loadLibrary("NdkExample");
    }

    public native String stringFromJni();
}







3. make a 'Application.mk' file under the 'ndk-root/apps/NdkExample' folder.


APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES := NdkExample




4. make a 'NdkExample/project' and make 'jni' and 'libs' folder under the 'project' folder.




5. make a 'Android.mk' file under the 'jni' folder.


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkExample
LOCAL_SRC_FILES := NdkExample.c
include $(BUILD_SHARED_LIBRARY)




6. move to 'NdkExample/bin' folder and make a header file from the 'NdkExample.class' file


javah com.example.NdkExample



7. move the header file to 'NdkExample/project/jni' folder and rename to 'NdkExample.h' for using easier.



8. make a 'NdkExample.c' file under the 'NdkExample/project/jni' folder.


#include "NdkExample.h"
#include <string.h>

jstring Java_com_example_NdkExample_stringFromJni(JNIEnv *env, jobject thiz)
{
    return (*env)->NewStringUTF(env, "Hello world from native code.");
}



9. compile the project under the 'ndk-root' folder.


make APP=NdkExample



10. move the 'libNdkExample.so' file to 'NdkExample/libs/armeabi' folder.
when you don't have the 'NdkExample/libs/armeabi' folder, you should make it.

*NOTE: You must change the name of loadLibrary like below.
the name is used by 'libNdkExample.so' file without 'lib' prefix and '.so' surfix.

System.loadLibrary("NdkExample");




11. use the library on your Android SDK project that you made(ex, 'NdkExample')


public class NdkExampleMain extends Activity {
    /** Called when the activity is first created. */
    NdkExample m_jniProject;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
       m_jniProject = new NdkExample();
        TextView tv = (TextView)findViewById(R.id.string_from_jni);
        tv.setText(m_jniProject.StringFromJNI());
        
    }
}






12. then, you can see the "Hello world from native code." text on your AVD emulator.




13. finish.




신고
Posted by 바츠05 트랙백 0 : 댓글 0




윈도우에서 계정에 한글이 포함되어 있으면,
AVD가 실행이 되지 않는다.

이럴때는, 영문계정을 만들어서 해도 되겠지만,
간단하게 AVD의 경로를 수정해도 된다.

android move avd -n AVD8 -p c:\avd\AVD8

신고
Posted by 바츠05 트랙백 0 : 댓글 0




HTTP POST 속도개선


Android에서 HttpClient, HttpGet, HttpPost 클래스를 통해서
HTTP 통신을 하게 되는데...
기본 설정으로 하면 HttpGet은 속도가 빠른 반면에
HttpPost는 2~3초가 걸린다.
이것을 해결하기 위해서는 HTTP 버전을 1.1로 지정해야 한다.

HttpParams params = new BasicHttpParams(); 
params.setParameter

(CoreProtocolPNames.PROTOCOL_VERSION,

HttpVersion.HTTP_1_1); 

HttpClient httpclient = new DefaultHttpClient(params); 

신고
Posted by 바츠05 트랙백 0 : 댓글 0



안드로이드 폰에서 Device ID 값 가져오기



퍼미션 추가하는 것 잊지말기. 






신고
Posted by 바츠05 트랙백 0 : 댓글 3



안드로이드 폰에서 Wi-Fi Mac 주소 가져오는 함수,
어떤 기계에서는 Wi-Fi 가 꺼져 있으면 못가져 온다고도 해서, 
Wi-Fi 가 활성화 되어있는지 체크하고 Mac 주소 가져옴.





그리고 반드시 퍼미션을 지정해 줘야 함.





신고
Posted by 바츠05 트랙백 0 : 댓글 2




SD 메모리 내에 있는 파일 및 폴더 삭제 함수



사용하는 방법은,







참조: http://holamiamor.tistory.com/289



신고
Posted by 바츠05 트랙백 0 : 댓글 0



Android 단말기는 WI-FI 와 3G 망으로 인터넷 연결이 되는데, 
요즘 거의 모든 Android application 들은 인터넷환경에 접속이 되어야 실행이 가능한 경우가 많다.

여기서 인터넷 환경에 연결되어 있는지 체크할 경우,
아래와 같이 하면 된다.

 

위 함수를 아래와 같이 사용,
 



그런데, 여기서 위와 같이 사용하면,
100% 동작하지 않는다.

위 함수가 동작하게 하려면 Permission 을 지정해야한다.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>



신고
Posted by 바츠05 트랙백 0 : 댓글 0

<Collapsed View>



<Collapsed View>


요즘 Android Market 에 있는 More and Less 버튼 기능을 구현하고 있는데,
구현은 어느정도 완료는 됐지만,

처음부터 Collapse 되어있게 하려고 onCreate() 내에 collapse 함수를 실행하니깐, 제대로 동작이 안되었다.

문제를 찾아보니 FrameLayout 의 getHeight() 함수가 onCreate() 에서 항상 0을 리턴했다.

그래서 방법을 좀더 찾아본 결과,
setContentView 로 불려지면, 실제로 뷰를 확장한다고 하지만, onDraw 가 불려지지 않아서 뷰의 크기를 제대로 못가져 온단다.
(onDraw 는 실제화면에 뿌려지기 바로전에 불려진다고 함) 

그래서 아래와 같이 코딩해야 하면 값이 불려와짐. 




그리고 또하나의 방법,



참조: http://www.androidpub.com/1073136






신고
Posted by 바츠05 트랙백 0 : 댓글 0




Android 에서 Ratingbar를 달았는데, 위와 같이 크기가 커져버리는 경우,
해결하는 방법에 두가지가 있는데,

AndroidManifest.xml 파일에 아래와 같이 입력하면 된다.

1. Android 1.5 이후 버전부터 지원하게 하려면, 




2. Android 1.5 이전 버전까지 지원하게 하려면,
 






위와 같이 해결하면,
아래 이미지와 같이 Ratingbar 의 크기가 화면에 맞춰진다.






신고
Posted by 바츠05 트랙백 0 : 댓글 0



APK 파일의 Package 정보를 알아보기 위해서는 aapt 라는 툴이 있어야 한다.


기본적인 aapt 는
android-sdk-window/platform-tools/ 폴더에 있는데,

별도의 path가 정의되어 있지 않다면,
android-sdk-window/tools/  폴더에 복사해서 사용해도 된다.


Package 정보를 보려면,

aapt.exe dump badging HelloWorld.apk
 
신고
Posted by 바츠05 트랙백 0 : 댓글 0

티스토리 툴바