-
Notifications
You must be signed in to change notification settings - Fork 50
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge package:jni and package:jnigen into shared native repository
- Loading branch information
Showing
590 changed files
with
88,877 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# Miscellaneous | ||
*.class | ||
*.log | ||
*.pyc | ||
*.swp | ||
.DS_Store | ||
.atom/ | ||
.buildlog/ | ||
.history | ||
.svn/ | ||
migrate_working_dir/ | ||
|
||
# IntelliJ related | ||
*.iml | ||
*.ipr | ||
*.iws | ||
.idea/ | ||
|
||
# The .vscode folder contains launch configuration and tasks you configure in | ||
# VS Code which you may wish to be included in version control, so this line | ||
# is commented out by default. | ||
#.vscode/ | ||
|
||
# Flutter/Dart/Pub related | ||
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. | ||
/pubspec.lock | ||
**/doc/api/ | ||
.dart_tool/ | ||
.packages | ||
build/ | ||
|
||
.vscode/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# This file tracks properties of this Flutter project. | ||
# Used by Flutter tool to assess capabilities and perform upgrades etc. | ||
# | ||
# This file should be version controlled. | ||
|
||
version: | ||
revision: 676cefaaff197f27424942307668886253e1ec35 | ||
channel: stable | ||
|
||
project_type: plugin_ffi | ||
|
||
# Tracks metadata for the flutter migrate command | ||
migration: | ||
platforms: | ||
- platform: root | ||
create_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
base_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
- platform: android | ||
create_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
base_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
- platform: linux | ||
create_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
base_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
- platform: macos | ||
create_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
base_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
- platform: windows | ||
create_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
base_revision: 676cefaaff197f27424942307668886253e1ec35 | ||
|
||
# User provided section | ||
|
||
# List of Local paths (relative to this file) that should be | ||
# ignored by the migrate tool. | ||
# | ||
# Files that are not part of the templates will be ignored by default. | ||
unmanaged_files: | ||
- 'lib/main.dart' | ||
- 'ios/Runner.xcodeproj/project.pbxproj' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
## 0.8.0-wip | ||
|
||
- **Breaking Change** ([#394](https://github.com/dart-lang/jnigen/issues/394)): | ||
Converted various `Exception`s into `Error`s: | ||
- `UseAfterReleaseException` -> `UseAfterReleaseError` | ||
- `DoubleReleaseException` -> `DoubleReleaseError` | ||
- `SpawnException` -> `JniError` (It's now a `sealed class`) | ||
- `JNullException` -> `JNullError` | ||
- `InvalidCallTypeException` -> `InvalidCallTypeError` | ||
- `HelperNotFoundException` -> `HelperNotFoundError` | ||
- `JvmExistsException` -> `JniVmExistsError` | ||
- `NoJvmInstanceException` -> `NoJvmInstanceError` | ||
- **Breaking Change**: Removed `InvalidJStringException`. | ||
- **Breaking Change**: The default return `callType` of type parameter `int` for | ||
methods such as `JObject.callMethodByName<int>` is now Java's `long` instead | ||
of `int` to be consistent with the way arguments work. | ||
- **Breaking Change**: `JType` is now `sealed`. | ||
- **Breaking Change**: Primitive types and their type classes are now `final`. | ||
- **Breaking Change**: `JArray.filled` now uses the generated type class of the | ||
`fill` object and not its Java runtime type. | ||
|
||
## 0.7.2 | ||
- Fixed a bug where reading non-null terminated strings would overflow. | ||
|
||
## 0.7.1 | ||
- Removed macOS Flutter plugin until package:jni supports it ([#41](https://github.com/dart-lang/jnigen/issues/41)). | ||
|
||
## 0.7.0 | ||
|
||
- **Breaking Change** ([#387](https://github.com/dart-lang/jnigen/issues/387)): | ||
Added `JBuffer` and `JByteBuffer` classes as default classes for | ||
`java.nio.Buffer` and `java.nio.ByteBuffer` respectively. | ||
- **Breaking Change**: Made the type classes `final`. | ||
- Fixed a bug where `addAll`, `removeAll` and `retainAll` in `JSet` would run | ||
their respective operation twice. | ||
- Fixed a bug where `JList.insertAll` would not throw the potentially thrown | ||
Java exception. | ||
|
||
## 0.6.1 | ||
|
||
- Depend on the stable version of Dart 3.1. | ||
|
||
## 0.6.0 | ||
|
||
- **Breaking Change** ([#131](https://github.com/dart-lang/jnigen/issues/131)): | ||
Renamed `delete*` to `release*`. | ||
- Added `PortProxy` and related methods used for interface implementation. | ||
- Added the missing binding for `java.lang.Character`. | ||
|
||
## 0.5.0 | ||
|
||
- **Breaking Change** ([#137](https://github.com/dart-lang/jnigen/issues/137)): | ||
Java primitive types are now all lowercase like `jint`, `jshort`, ... | ||
- The bindings for `java.util.Set`, `java.util.Map`, `java.util.List` and the | ||
numeric types like `java.lang.Integer`, `java.lang.Boolean`, ... are now | ||
included in `package:jni`. | ||
|
||
## 0.4.0 | ||
|
||
- Type classes now have `superCount` and `superType` getters used for type | ||
inference. | ||
|
||
## 0.3.0 | ||
|
||
- Added `PortContinuation` used for `suspend fun` in Kotlin. | ||
- `dartjni` now depends on `dart_api_dl.h`. | ||
|
||
## 0.2.1 | ||
|
||
- Added `.clang-format` to pub. | ||
|
||
## 0.2.0 | ||
|
||
- Added array support | ||
- Added generic support | ||
- `JniX` turned into `JX` for a more terse code. | ||
|
||
## 0.1.1 | ||
|
||
- Windows support for running tests and examples on development machines. | ||
|
||
## 0.1.0 | ||
|
||
- Initial version: Android and Linux support, JObject API |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
Copyright 2022, the Dart project authors. | ||
|
||
Redistribution and use in source and binary forms, with or without | ||
modification, are permitted provided that the following conditions are | ||
met: | ||
|
||
* Redistributions of source code must retain the above copyright | ||
notice, this list of conditions and the following disclaimer. | ||
* Redistributions in binary form must reproduce the above | ||
copyright notice, this list of conditions and the following | ||
disclaimer in the documentation and/or other materials provided | ||
with the distribution. | ||
* Neither the name of Google LLC nor the names of its | ||
contributors may be used to endorse or promote products derived | ||
from this software without specific prior written permission. | ||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# jni | ||
|
||
This is a support library to access JNI from Dart / Flutter code. This provides the common infrastructure to bindings generated by [jnigen](https://pub.dev/packages/jnigen), as well as some utility methods. | ||
|
||
This library contains: | ||
|
||
* Functions to access the JNIEnv and JavaVM variables from JNI, and wrapper functions to those provided by JNI. JNIEnv is exposed via `GlobalJniEnv` type which provides a thin abstraction over JNIEnv, so that it can be used from multiple threads. | ||
* Functions to spawn a JVM on desktop platforms (`Jni.spawn`). | ||
* Some Android-specific helpers (get application context and current activity references). | ||
* `JObject` class, which provides base class for classes generated by jnigen. | ||
* Commonly used Java classes like `JList`, `JMap`, `JInteger`, ... | ||
|
||
Apart from being the base library for code generated by `jnigen` this can also be used for one-off uses of the JNI and debugging. __To generate type-safe bindings from Java libraries, use `jnigen`.__ | ||
|
||
## Documentation | ||
The test/ directory contains files with comments explaining the basics of this module, and the example/ directory contains a flutter example which also touches some Android-specifics. | ||
|
||
Using this library assumes some familiarity with JNI - it's threading model and object references, among other things. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
include: package:flutter_lints/flutter.yaml | ||
|
||
analyzer: | ||
exclude: [build/**, third_party/**] | ||
language: | ||
strict-raw-types: true | ||
|
||
linter: | ||
rules: | ||
- prefer_final_locals | ||
- prefer_const_declarations | ||
# Additional information about this file can be found at | ||
# https://dart.dev/guides/language/analysis-options |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
*.iml | ||
.gradle | ||
/local.properties | ||
/.idea/workspace.xml | ||
/.idea/libraries | ||
.DS_Store | ||
/build | ||
/captures | ||
.cxx |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
This folder contains the [Android plugin class](src/main/java/com/github/dart_lang/jni/JniPlugin.java) which takes care of initializing JNI on Android. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
// The Android Gradle Plugin builds the native code with the Android NDK. | ||
|
||
group 'com.github.dart_lang.jni' | ||
version '1.0' | ||
|
||
buildscript { | ||
ext.kotlin_version = '1.6.10' | ||
repositories { | ||
google() | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
// The Android Gradle Plugin knows how to build native code with the NDK. | ||
classpath 'com.android.tools.build:gradle:7.1.2' | ||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | ||
} | ||
} | ||
|
||
rootProject.allprojects { | ||
repositories { | ||
google() | ||
mavenCentral() | ||
} | ||
} | ||
|
||
apply plugin: 'com.android.library' | ||
|
||
android { | ||
// Keeping the classes from being removed by proguard. | ||
defaultConfig { | ||
consumerProguardFiles 'consumer-rules.pro' | ||
} | ||
buildTypes { | ||
release { | ||
minifyEnabled false | ||
} | ||
} | ||
|
||
// Condition for namespace compatibility in AGP 8 | ||
if (project.android.hasProperty("namespace")) { | ||
namespace 'com.github.dart_lang.jni' | ||
} | ||
|
||
// Adding [PortContinuation] and [PortProxy] classes shared between Flutter and | ||
// Dart-standalone versions of package:jni. | ||
sourceSets { | ||
main { | ||
java { | ||
srcDirs '../java/src/main/java' | ||
} | ||
} | ||
} | ||
|
||
// Bumping the plugin compileSdkVersion requires all clients of this plugin | ||
// to bump the version in their app. | ||
compileSdkVersion 31 | ||
|
||
// Bumping the plugin ndkVersion requires all clients of this plugin to bump | ||
// the version in their app and to download a newer version of the NDK. | ||
// Note(MaheshH) - Flutter seems to download minimum NDK of flutter when | ||
// below line is commented out. | ||
// How about leaving it? | ||
// ndkVersion "21.1.6352462" | ||
|
||
// Invoke the shared CMake build with the Android Gradle Plugin. | ||
externalNativeBuild { | ||
cmake { | ||
path "../src/CMakeLists.txt" | ||
|
||
// The default CMake version for the Android Gradle Plugin is 3.10.2. | ||
// https://developer.android.com/studio/projects/install-ndk#vanilla_cmake | ||
// | ||
// The Flutter tooling requires that developers have CMake 3.10 or later | ||
// installed. You should not increase this version, as doing so will cause | ||
// the plugin to fail to compile for some customers of the plugin. | ||
// version "3.10.2" | ||
} | ||
} | ||
|
||
compileOptions { | ||
sourceCompatibility JavaVersion.VERSION_1_8 | ||
targetCompatibility JavaVersion.VERSION_1_8 | ||
} | ||
|
||
defaultConfig { | ||
minSdkVersion 16 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
-keep class com.github.dart_lang.jni.** { *; } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
rootProject.name = 'jni' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
package="com.github.dart_lang.jni"> | ||
</manifest> |
60 changes: 60 additions & 0 deletions
60
pkgs/jni/android/src/main/java/com/github/dart_lang/jni/JniPlugin.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file | ||
// for details. All rights reserved. Use of this source code is governed by a | ||
// BSD-style license that can be found in the LICENSE file. | ||
|
||
package com.github.dart_lang.jni; | ||
|
||
import android.app.Activity; | ||
import android.content.Context; | ||
import androidx.annotation.NonNull; | ||
import io.flutter.embedding.engine.plugins.FlutterPlugin; | ||
import io.flutter.embedding.engine.plugins.activity.ActivityAware; | ||
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; | ||
import io.flutter.plugin.common.PluginRegistry.Registrar; | ||
|
||
public class JniPlugin implements FlutterPlugin, ActivityAware { | ||
|
||
@Override | ||
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { | ||
setup(binding.getApplicationContext()); | ||
} | ||
|
||
public static void registerWith(Registrar registrar) { | ||
JniPlugin plugin = new JniPlugin(); | ||
plugin.setup(registrar.activeContext()); | ||
} | ||
|
||
private void setup(Context context) { | ||
initializeJni(context, getClass().getClassLoader()); | ||
} | ||
|
||
@Override | ||
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {} | ||
|
||
// Activity handling methods | ||
@Override | ||
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) { | ||
Activity activity = binding.getActivity(); | ||
setJniActivity(activity, activity.getApplicationContext()); | ||
} | ||
|
||
@Override | ||
public void onDetachedFromActivityForConfigChanges() {} | ||
|
||
@Override | ||
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) { | ||
Activity activity = binding.getActivity(); | ||
setJniActivity(activity, activity.getApplicationContext()); | ||
} | ||
|
||
@Override | ||
public void onDetachedFromActivity() {} | ||
|
||
native void initializeJni(Context context, ClassLoader classLoader); | ||
|
||
native void setJniActivity(Activity activity, Context context); | ||
|
||
static { | ||
System.loadLibrary("dartjni"); | ||
} | ||
} |
Oops, something went wrong.