You've already forked lazarus-ccr
Adds a test project for building JNI Pascal Android apps
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2164 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
21
bindings/android-ndk/examples/jnitest/AndroidManifest.xml
Normal file
21
bindings/android-ndk/examples/jnitest/AndroidManifest.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.pascal.jnitest"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true" />
|
||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />
|
||||
<application android:label="@string/app_name" android:icon="@drawable/icon"
|
||||
android:debuggable="True">
|
||||
<activity android:name="AndroidJNITest"
|
||||
android:configChanges="orientation|keyboardHidden"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTop">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
17
bindings/android-ndk/examples/jnitest/build.properties
Normal file
17
bindings/android-ndk/examples/jnitest/build.properties
Normal file
@ -0,0 +1,17 @@
|
||||
# This file is used to override default values used by the Ant build system.
|
||||
#
|
||||
# This file must be checked in Version Control Systems, as it is
|
||||
# integral to the build system of your project.
|
||||
|
||||
# This file is only used by the Ant script.
|
||||
|
||||
# You can use this to override default values such as
|
||||
# 'source.dir' for the location of your java source folder and
|
||||
# 'out.dir' for the location of your output folder.
|
||||
|
||||
# You can also use it define how the release builds are signed by declaring
|
||||
# the following properties:
|
||||
# 'key.store' for the location of your keystore and
|
||||
# 'key.alias' for the name of the key to use.
|
||||
# The password will be asked during the build when you use the 'release' target.
|
||||
|
85
bindings/android-ndk/examples/jnitest/build.xml
Normal file
85
bindings/android-ndk/examples/jnitest/build.xml
Normal file
@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="AndroidLCLTest" default="help">
|
||||
|
||||
<!-- The local.properties file is created and updated by the 'android' tool.
|
||||
It contains the path to the SDK. It should *NOT* be checked into
|
||||
Version Control Systems. -->
|
||||
<loadproperties srcFile="local.properties" />
|
||||
|
||||
<!-- The ant.properties file can be created by you. It is only edited by the
|
||||
'android' tool to add properties to it.
|
||||
This is the place to change some Ant specific build properties.
|
||||
Here are some properties you may want to change/update:
|
||||
|
||||
source.dir
|
||||
The name of the source directory. Default is 'src'.
|
||||
out.dir
|
||||
The name of the output directory. Default is 'bin'.
|
||||
|
||||
For other overridable properties, look at the beginning of the rules
|
||||
files in the SDK, at tools/ant/build.xml
|
||||
|
||||
Properties related to the SDK location or the project target should
|
||||
be updated using the 'android' tool with the 'update' action.
|
||||
|
||||
This file is an integral part of the build system for your
|
||||
application and should be checked into Version Control Systems.
|
||||
|
||||
-->
|
||||
<property file="ant.properties" />
|
||||
|
||||
<!-- The project.properties file is created and updated by the 'android'
|
||||
tool, as well as ADT.
|
||||
|
||||
This contains project specific properties such as project target, and library
|
||||
dependencies. Lower level build properties are stored in ant.properties
|
||||
(or in .classpath for Eclipse projects).
|
||||
|
||||
This file is an integral part of the build system for your
|
||||
application and should be checked into Version Control Systems. -->
|
||||
<loadproperties srcFile="project.properties" />
|
||||
|
||||
<!-- quick check on sdk.dir -->
|
||||
<fail
|
||||
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project'"
|
||||
unless="sdk.dir"
|
||||
/>
|
||||
|
||||
|
||||
<!-- extension targets. Uncomment the ones where you want to do custom work
|
||||
in between standard targets -->
|
||||
<!--
|
||||
<target name="-pre-build">
|
||||
</target>
|
||||
<target name="-pre-compile">
|
||||
</target>
|
||||
|
||||
/* This is typically used for code obfuscation.
|
||||
Compiled code location: ${out.classes.absolute.dir}
|
||||
If this is not done in place, override ${out.dex.input.absolute.dir} */
|
||||
<target name="-post-compile">
|
||||
</target>
|
||||
-->
|
||||
|
||||
<!-- Import the actual build file.
|
||||
|
||||
To customize existing targets, there are two options:
|
||||
- Customize only one target:
|
||||
- copy/paste the target into this file, *before* the
|
||||
<import> task.
|
||||
- customize it to your needs.
|
||||
- Customize the whole content of build.xml
|
||||
- copy/paste the content of the rules files (minus the top node)
|
||||
into this file, replacing the <import> task.
|
||||
- customize to your needs.
|
||||
|
||||
***********************
|
||||
****** IMPORTANT ******
|
||||
***********************
|
||||
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
|
||||
in order to avoid having your file be overridden by tools such as "android update project"
|
||||
-->
|
||||
<!-- version-tag: 1 -->
|
||||
<import file="${sdk.dir}/tools/ant/build.xml" />
|
||||
|
||||
</project>
|
11
bindings/android-ndk/examples/jnitest/default.properties
Normal file
11
bindings/android-ndk/examples/jnitest/default.properties
Normal file
@ -0,0 +1,11 @@
|
||||
# This file is automatically generated by Android Tools.
|
||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
||||
#
|
||||
# This file must be checked in Version Control Systems.
|
||||
#
|
||||
# To customize properties used by the Ant build system use,
|
||||
# "build.properties", and override values to adapt the script to your
|
||||
# project structure.
|
||||
|
||||
# Project target.
|
||||
target=android-4
|
70
bindings/android-ndk/examples/jnitest/jni/nativetest.pas
Executable file
70
bindings/android-ndk/examples/jnitest/jni/nativetest.pas
Executable file
@ -0,0 +1,70 @@
|
||||
library nativetest;
|
||||
{$ifdef fpc}
|
||||
{$mode delphi}
|
||||
{$endif}
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
jni in 'jni.pas',
|
||||
log in 'log.pas';
|
||||
|
||||
const curClass:JClass=nil;
|
||||
nativeCodeLoaded:JfieldID=nil;
|
||||
|
||||
function Java_com_bero_nativetest_Main_stringFromJNI(env:PJNIEnv;this:jobject):jstring;{$ifdef mswindows}stdcall;{$else}cdecl;{$endif}
|
||||
var x:single;
|
||||
begin
|
||||
__android_log_write(ANDROID_LOG_INFO,'nativetest','Java_com_bero_nativetest_Main_stringFromJNI entered');
|
||||
curEnv^.SetLongField(curEnv,curClass,nativeCodeLoaded,1);
|
||||
x:=8;
|
||||
result:=env^.NewStringUTF(env,pchar('Hello from native free pascal code by BeRo to the java world on the android platform ! '+floattostr(x*0.5)));
|
||||
__android_log_write(ANDROID_LOG_INFO,'nativetest','Java_com_bero_nativetest_Main_stringFromJNI exited');
|
||||
end;
|
||||
|
||||
const NativeMethods:array[0..0] of JNINativeMethod=
|
||||
((name:'stringFromJNI';
|
||||
signature:'()Ljava/lang/String;';
|
||||
fnPtr:@Java_com_bero_nativetest_Main_stringFromJNI;));
|
||||
|
||||
function JNI_OnLoad(vm:PJavaVM;reserved:pointer):jint;{$ifdef mswindows}stdcall;{$else}cdecl;{$endif}
|
||||
begin
|
||||
curVM:=vm;
|
||||
__android_log_write(ANDROID_LOG_INFO,'nativetest','JNI_OnLoad called');
|
||||
if curVM^.GetEnv(curVM,@curEnv,JNI_VERSION_1_6)<>JNI_OK then begin
|
||||
__android_log_write(ANDROID_LOG_FATAL,'nativetest','curVM^.GetEnv failed');
|
||||
result:=JNI_ERR;
|
||||
exit;
|
||||
end;
|
||||
|
||||
curClass:=curEnv^.FindClass(curEnv,'com/bero/nativetest/Main');
|
||||
if not assigned(curClass) then begin
|
||||
__android_log_write(ANDROID_LOG_FATAL,'nativetest','curEnv^.FindClass failed');
|
||||
result:=JNI_ERR;
|
||||
exit;
|
||||
end;
|
||||
if curEnv^.RegisterNatives(curEnv,curClass,@NativeMethods[0],length(NativeMethods))<0 then begin
|
||||
__android_log_write(ANDROID_LOG_FATAL,'nativetest','curEnv^.RegisterNatives failed');
|
||||
result:=JNI_ERR;
|
||||
exit;
|
||||
end;
|
||||
|
||||
nativeCodeLoaded:=curEnv^.GetFieldID(curEnv,curClass,'nativeCodeLoaded','J');
|
||||
if not assigned(nativeCodeLoaded) then begin
|
||||
__android_log_write(ANDROID_LOG_FATAL,'nativetest','curEnv^.GetFieldID failed');
|
||||
result:=JNI_ERR;
|
||||
exit;
|
||||
end;
|
||||
|
||||
result:=JNI_VERSION_1_6;
|
||||
end;
|
||||
|
||||
procedure JNI_OnUnload(vm:PJavaVM;reserved:pointer);{$ifdef mswindows}stdcall;{$else}cdecl;{$endif}
|
||||
begin
|
||||
end;
|
||||
|
||||
exports JNI_OnLoad name 'JNI_OnLoad',
|
||||
JNI_OnUnload name 'JNI_OnUnload',
|
||||
Java_com_bero_nativetest_Main_stringFromJNI name 'Java_com_bero_nativetest_Main_stringFromJNI';
|
||||
|
||||
begin
|
||||
end.
|
10
bindings/android-ndk/examples/jnitest/local.properties
Normal file
10
bindings/android-ndk/examples/jnitest/local.properties
Normal file
@ -0,0 +1,10 @@
|
||||
# This file is automatically generated by Android Tools.
|
||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
||||
#
|
||||
# This file must *NOT* be checked in Version Control Systems,
|
||||
# as it contains information specific to your local configuration.
|
||||
|
||||
# location of the SDK. This is only used by Ant
|
||||
# For customization when using a Version Control System, please read the
|
||||
# header note.
|
||||
sdk.dir=/home/felipe/Programas/android-sdk-linux
|
BIN
bindings/android-ndk/examples/jnitest/res/drawable/icon.png
Executable file
BIN
bindings/android-ndk/examples/jnitest/res/drawable/icon.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
5
bindings/android-ndk/examples/jnitest/res/values/strings.xml
Executable file
5
bindings/android-ndk/examples/jnitest/res/values/strings.xml
Executable file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="hello">Hello World, Main!</string>
|
||||
<string name="app_name">NativeTest</string>
|
||||
</resources>
|
@ -0,0 +1,34 @@
|
||||
package com.pascal.jnitest;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.widget.TextView;
|
||||
import android.util.Log;
|
||||
|
||||
public class AndroidJNITest extends Activity {
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.main);
|
||||
|
||||
TextView tv = new TextView(this);
|
||||
tv.setText( stringFromJNI() );
|
||||
setContentView(tv);
|
||||
}
|
||||
|
||||
public native String stringFromJNI();
|
||||
|
||||
public long nativeCodeLoaded=0;
|
||||
|
||||
static {
|
||||
try {
|
||||
Log.i("JNI", "Trying to load libnativetest.so");
|
||||
System.loadLibrary("nativetest");
|
||||
} catch(UnsatisfiedLinkError ule) {
|
||||
Log.e("JNI", "WARNING: Could not load libnativetest.so");
|
||||
ule.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user