diff --git a/staticlibs/Android.bp b/staticlibs/Android.bp index f1e7c85e55..93084ccaef 100644 --- a/staticlibs/Android.bp +++ b/staticlibs/Android.bp @@ -103,6 +103,7 @@ java_library { "device/com/android/net/module/util/BpfMap.java", "device/com/android/net/module/util/HexDump.java", "device/com/android/net/module/util/Ipv6Utils.java", + "device/com/android/net/module/util/JniUtil.java", "device/com/android/net/module/util/Struct.java", "device/com/android/net/module/util/netlink/*.java", "device/com/android/net/module/util/structs/*.java", diff --git a/staticlibs/device/com/android/net/module/util/JniUtil.java b/staticlibs/device/com/android/net/module/util/JniUtil.java new file mode 100644 index 0000000000..5210a3ef0e --- /dev/null +++ b/staticlibs/device/com/android/net/module/util/JniUtil.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.net.module.util; + +/** + * Utilities for modules to use jni. + */ +public final class JniUtil { + /** + * The method to find jni library accroding to the giving package name. + * + * The jni library name would be packageName + _jni.so. E.g. + * com_android_networkstack_tethering_util_jni for tethering, + * com_android_connectivity_util_jni for connectivity. + */ + public static String getJniLibraryName(final Package pkg) { + final String libPrefix = pkg.getName().replaceAll("\\.", "_"); + + return libPrefix + "_jni"; + } +} diff --git a/staticlibs/tests/unit/src/com/android/net/module/util/JniUtilTest.kt b/staticlibs/tests/unit/src/com/android/net/module/util/JniUtilTest.kt new file mode 100644 index 0000000000..7574087780 --- /dev/null +++ b/staticlibs/tests/unit/src/com/android/net/module/util/JniUtilTest.kt @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.net.module.util + +import androidx.test.filters.SmallTest +import androidx.test.runner.AndroidJUnit4 +import kotlin.test.assertEquals +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +@SmallTest +public final class JniUtilTest { + private val TEST_JAVA_UTIL_NAME = "java_util_jni" + private val TEST_ORG_JUNIT_NAME = "org_junit_jni" + + @Test + fun testGetJniLibraryName() { + assertEquals(TEST_JAVA_UTIL_NAME, + JniUtil.getJniLibraryName(java.util.Set::class.java.getPackage())) + assertEquals(TEST_ORG_JUNIT_NAME, + JniUtil.getJniLibraryName(org.junit.Before::class.java.getPackage())) + } +}