Android NDK��JNI���g�p���ăA�v��������������ɂ��FAndroid�œ����g��Java�A�v���쐬����i15�j�i1/3 �y�[�W�j

» 2010�N03��17�� 00��00�� ���J
[�������C������ЃC�[�t���[]

Android NDK�ŐV�ł�OpenGL ES 2.0���T�|�[�g

�@����̃e�[�}�́uAndroid��JNI�iJava Native Interface�j���g�p�����A�v���̍������v�ł��BC/C++��OpenGL ES�i���j�Ƃ������l�C�e�B�u�R�[�h���g���c�[���Ȃǂ̃Z�b�g�́AAndroid NDK�iNative Development Kit�j�Ƃ��Ē񋟂���Ă��āAJNI���g�p�����������Ɍ������܂���B

��OpenGL ES�iOpenGL for Embedded Systems�jOpenGL ES�iOpenGL for Embedded Systems�j�g�я��[����g�ݍ��݌�����OpenGL�̃T�u�Z�b�g�BOpenGL�́A��ʓI�ɕ��y���Ă���O���t�B�b�N�X�v���O���~���O�p��C/C++��API�̂��Ɓi�Q�l�F�͂��߂悤3D�`��ABREW��OpenGL ES�v���O���~���O�j

�@JNI��NDK�̏ڍׂ́A�ȉ��̋L�������m�F���������B

�@�����Android NDK�ł����A����A�ŐV�ł�Revision 3�������[�X����AOpenGL ES 2.0���T�|�[�g�����悤�ɂȂ�A����ɃO���t�B�b�N�`��@�\����������܂����B

�@���Ȃ݂ɁAr3�iRevision 3�j�����[�X�ɔ����A���܂܂ł�NDK�̃o�[�W�����AAndroid 1.6 NDK Release 1�i1.6r1�j��Android NDK r2�iRevision 2�j�ɁA1.5 NDK Release 1�i1.5r1�j�͓�����r1�iRevision 1�j�ɌĂѕ����ς���Ă���̂ŁA�����ӂ��������B

�����T���v����JNI�ō������������ʂ𓮉�Ŋm�F

�@����̑�ނƂ��āA�O��́uAndroid 2.1�̐V�@�\�uLive Wallpaper�v�ō��A�������R����g�҂��󂯁h�v�̃T���v�����g�p���āA�R����G�t�F�N�g�����������܂��B���L�̓���ō���������Ă��邱�Ƃ��m�F�ł��܂��ˁB

�ŏ��́AJNI�����ŁA����Java�łɐ؂�ւ��āA�ēxJNI�����łɖ߂�������T���v��

�@����̍��������{�����T���v���A�v���́A�ȉ����_�E�����[�h���Ă��������B

���������AJNI����Android�ɕK�v�Ȃ́H

�@Web�A�v���P�[�V�������J������Java�v���O���}�ɂƂ��āAJNI�͂��܂�g�p���Ȃ��@�\�ł͂Ȃ����Ǝv���܂��B����Java�Ƃ������ꂨ��ю��s�‹��͂ƂĂ��D�G�Ȃ̂ŁAJava�����Ŏ�����Ă��܂����߂ł��B

�@����́A�ړI��������JNI���g�p����̂ł����A���̑O��Android��JNI���g�p���郁���b�g�ƃf�����b�g�����Ă݂܂��傤�B

�����b�g �f�����b�g
�����̃��C�u�����̊��p �v���b�g�t�H�[���Ɉˑ�
�p�t�H�[�}���X���� �������Ǘ��Ȃǂ��ʓ|
�\1�@JNI�̃����b�g�ƃf�����b�g

�@�����b�g��C/C++�ȂǂŎ������ꂽ�����̃��C�u�����𗘗p�ł��邱�ƁA�p�t�H�[�}���X������ł��邱�Ƃł��BAndroid 2.1��Dalvik VM�ɂ́AJIT�͓��ڂ���Ă��Ȃ����߁A�p�t�H�[�}���X����͌����ł��B�f�����b�g�̓v���b�g�t�H�[���iCPU�̃A�[�L�e�N�`���j�Ɉˑ����Ă��܂����Ƃ��������܂��B

�@�����_��Android�̃v���b�g�t�H�[���̂قƂ�ǂ�ARM�A�[�L�e�N�`�����̗p���Ă��܂����Ax86���͂��߁A���܂��܂�CPU�̃v���b�g�t�H�[�����T�|�[�g����n�߂Ă��܂��B

�@����̃T���v���́AARM�����̃l�C�e�B�u���C�u�������A�v���ɑg�ݍ��܂ꂽ�`�ɂȂ��Ă��܂��B���̃l�C�e�B�u���C�u������ARM�A�[�L�e�N�`���ȊO�œ���ł��Ȃ��̂ŁA�K�v�ł���΁uSystem.getProperty("os.arch")�v�Ŏ擾�����l�Ɂuarm�v�܂��́uARM�v���܂܂�Ă��邩�ǂ����Ŕ��f���܂��B�܂܂�Ă��Ȃ��ꍇ�́A�l�C�e�B�u���C�u���������[�h�����A��֎�i���u����̂������ł��傤�B

�R�����@�u���JNI�̃������Ǘ��ɑ΂���헪�v

JNI�̎�����C/C++���g�p���邱�ƂɂȂ�̂ł����AC/C++���g�p����ɓ�����A���Ȃ̂��������Ǘ��ł��B�ȉ��ɁAJNI�ɂ����郁�����Ǘ��̐헪���Љ�܂��B

�EJNI_OnLoad()�AJNI_OnUnload()
JNI_OnLoad()�́A�l�C�e�B�u���C�u���������[�h���ꂽ�ۂɌĂяo�����֐��ŁAJNI_OnUnload()�֐��̓l�C�e�B�u���C�u�������܂ރN���X���[�_���K�x�[�W�R���N�^�ʼn�������ۂɌĂяo����܂��B�l�C�e�B�u���C�u�����Ŋm�ۂ����������́AJNI_OnUnload()�֐��ʼn��������@���l�����܂��B�l�C�e�B�u���̍�Ɨ̈��V�X�e���ŋ��L�”\�ȃ������Ȃǂ̉���Ɍ����Ă��܂��B

�EObject#finalize()
�l�C�e�B�u���Ŋm�ۂ����������́A���̃A�h���X��Java���̃t�B�[���h��int�Ƃ��ĕێ����Ă����A�Ώۂ̃C���X�^���X���K�x�[�W�R���N�^�ʼn�������ۂɁAfinalize()���\�b�h�ʼn��������@���l�����܂��B�l�C�e�B�u���̏�����Java�̃C���X�^���X�ɘA������ꍇ�Ɍ����Ă��܂��B

�ǂ���̃P�[�X�ɂ��Ă��A�������ȊO�Ƀ��\�[�X�̉�����K�v�ł��B���\�[�X�̉���ƃ������̉���́A�K�v�ƂȂ�^�C�~���O���قȂ�ꍇ������̂ŁA���ӂ��Ă��������B


�A�v���̂ǂ����d���̂��𒲂ׁA�l�C�e�B�u������Ɓc

�@����̖ړI�́AJNI���g�p�����������ł��B�ł�����A�܂��ǂ̕����̏������d���̂��������܂��B

public void draw(Canvas canvas){
    synchronized (this) {
        Log.d("TIME", "1:" + System.currentTimeMillis());
        for (int i = 0; i < width * height; i++) {
            if (seedparam[i]!= 0 && seedparam[i] > (int)((fireLevel - boost) * Math.random())) {
                pallet[i] = 127;
            } else if (seedparam[i] != 0) {
                pallet[i] = 0;
            }
        }
        if (boost > 0) {
            boost--;
        }
 
        Log.d("TIME", "2:" + System.currentTimeMillis());
        for (int i = 1; i < height - 1; i++) {
            for (int j = 1; j < width - 1; j++) {
                pallet[(i - 1) * width + j] = (pallet[i * width + j] + 
                        pallet[i * width + j - 1] + 
                        pallet[i * width + j + 1] + 
                        pallet[(i - 1) * width + j] + 
                        pallet[(i + 1) * width + j]) / 5;
            }
        }
        Log.d("TIME", "3:" + System.currentTimeMillis());
 
        for (int i = 0; i < width * height; i++) {
            image[i] = color[pallet[i]];
        }
 
        Log.d("TIME", "4:" + System.currentTimeMillis());
        bitmap.setPixels(image, 0, width, 0, 0, width, height);
        Log.d("TIME", "5:" + System.currentTimeMillis());
        canvas.drawBitmap(bitmap, 0, 0, null);
        Log.d("TIME", "6:" + System.currentTimeMillis());
    }
}

�@��L�͑O��̃T���v���̏�Ԃ̃\�[�X�R�[�h�ŁA�Ƃ���ǂ���Ƀ��O�����ߍ���ł���܂��B�M�҂̊‹��ł̃G�~�����[�^��ł̏��v���Ԃ͈ȉ��̒ʂ�ł��B

�敪 �����T�v �o�ߎ���
1�`2 �e�s�N�Z���̃p���b�g�������� 331ms
2�`3 �e�s�N�Z���̃p���b�g���Čv�Z 1224ms
3�`4 �e�s�N�Z���F���p���b�g����I�� 219ms
4�`5 �r�b�g�}�b�v�Ƀs�N�Z���f�[�^��ݒ� 40ms
5�`6 �r�b�g�}�b�v��`�� 6ms
�\2�@�M�҂̊‹��ł̃G�~�����[�^��ł̏��v����

�@for���[�v�����Ńs�N�Z���������s���Ă���������|�I�ɒx���ł��B������؂�o���ăl�C�e�B�u������΁A�������������߂����ł��B

public void draw(Canvas canvas) {
    synchronized (this) {
        effect(fireLevel, width, height, image, pallet, seedparam, color);
        bitmap.setPixels(image, 0, width, 0, 0, width, height);
        canvas.drawBitmap(bitmap, 0, 0, null);
    }
}
private native void effect(int fireLevel, int width, int height, int[] image, int[] pallet, int[] seedparam, int[] color);

�@�V�����\�[�X�R�[�h�́A��L�̂悤�ɁA�������Ԃ̂����镔�������ׂăl�C�e�B�u�R�[�h�ɒu�������Ă��܂��BJava�݂̂ŕ���1300ms�������Ă����`�揈�����AJNI�ɒu�������邱�Ƃŕ���70ms�ɂȂ�܂����B

�敪 �����T�v �o�ߎ���
Native �s�N�Z������ 30ms
Java �r�b�g�}�b�v���� 40ms
�\3�@���v���Ԃ̔�r

�@Java�̏������l�C�e�B�u�ɈڐA���邱�Ƃō������ł���A�Ƃ�����ϗǂ���ɂȂ������Ǝv���܂��B

�@����ł́A���y�[�W���JNI�ւ̒u���������@���ڂ������Ă����܂��傤�B

�@�@�@�@�@�@ 1|2|3 ���̃y�[�W��

Copyright © ITmedia, Inc. All Rights Reserved.

'; this.insertTarget = document.querySelector('#cmsBody .subscription') || document.querySelector('#cmsBody .inner'); }; BodyAdIMSWithCCE.prototype = Object.create(BodyAdContent.prototype); BodyAdIMSWithCCE.prototype.activate = function () { refreshGam('InArtSpecialLink'); } // global reference window.itm = itm; //entry point BodyAdEventBase.polyfill(); const bodyAdManager = BodyAdManager.getInstance(); bodyAdManager.addEventListener(BodyAdManager.EVENTS.READY, function (ev) { bodyAdManager.loadAdvertise(); }); bodyAdManager.init(); })();
�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

Microsoft  WindowsőO2025
AI for GWjAO
[R[h^m[R[h Zg by IT - ITGWjArWlX̒SŊ􂷂gD
Cloud Native Central by IT - XP[uȔ\͂gD
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B