繁体   English   中英

生成C ++头文件android

[英]Generating C++ header file android

我已经尝试创建C++ header文件3天了,我在Github上下载了一个使用C++的项目,问题是我想修改该项目,因为它仅在armeabi-v7a架构上运行。 我想为armeabi-v7ax86都生成.so文件,下面是java类:

package me.myname.scanner.scanlibrary
/**
* Created by jhansi on 28/03/15.
 */

public class ScanActivity extends Activity implements IScanner {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.scan_layout);
    init();
}

private void init() {
    PickImageFragment fragment = new PickImageFragment();
    Bundle bundle = new Bundle();
    bundle.putInt(ScanConstants.OPEN_INTENT_PREFERENCE, getPreferenceContent());
    fragment.setArguments(bundle);
    android.app.FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.content, fragment);
    fragmentTransaction.commit();
}

protected int getPreferenceContent() {
    return getIntent().getIntExtra(ScanConstants.OPEN_INTENT_PREFERENCE, 0);
}

@Override
public void onBitmapSelect(Uri uri) {
    ScanFragment fragment = new ScanFragment();
    Bundle bundle = new Bundle();
    bundle.putParcelable(ScanConstants.SELECTED_BITMAP, uri);
    fragment.setArguments(bundle);
    android.app.FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.content, fragment);
    fragmentTransaction.addToBackStack(ScanFragment.class.toString());
    fragmentTransaction.commit();
}

@Override
public void onScanFinish(Uri uri) {
    ResultFragment fragment = new ResultFragment();
    Bundle bundle = new Bundle();
    bundle.putParcelable(ScanConstants.SCANNED_RESULT, uri);
    fragment.setArguments(bundle);
    android.app.FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.content, fragment);
    fragmentTransaction.addToBackStack(ResultFragment.class.toString());
    fragmentTransaction.commit();
}

public native Bitmap getScannedBitmap(Bitmap bitmap, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);

public native Bitmap getGrayBitmap(Bitmap bitmap);

public native Bitmap getMagicColorBitmap(Bitmap bitmap);

public native Bitmap getBWBitmap(Bitmap bitmap);

public native float[] getPoints(Bitmap bitmap);

static {
    System.loadLibrary("opencv_java");
    System.loadLibrary("Scanner");
}

Android.mk文件:

LOCAL_PATH := $(call my-dir)
//point of mofication
APP_ABI := x86 armeabi
include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
include sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := Scanner
LOCAL_SRC_FILES := scan.cpp
LOCAL_LDLIBS    += -lm -llog -landroid
LOCAL_LDFLAGS += -ljnigraphics
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_STL := stlport_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI :=  x86 armeabi
APP_PLATFORM := android-14

顶级gradle.build

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
    applicationId "me.myname.scanner"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled false
    ndk
            {
                moduleName "Scanner"
            }
}


sourceSets.main
        {
            jni.srcDirs = []
            jniLibs.srcDir 'src/main/libs'
        }


buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
productFlavors {
}

}

gradle.properties

# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your 
  build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -  XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
#   

 http://www.gradle.org/docs/current/userguide/
 multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

android.useDeprecatedNdk=true

但是即使如此,我仍然无法生成Header文件和.so ,我的项目结构如图所示

项目结构

这是我第一次与JNI打交道,我已经阅读和观看了许多视频,但对我来说不起作用。 所有帮助将不胜感激。

我终于找到了为什么我的代码没有生成任何header文件或.so文件的原因,首先,似乎ndk可能有点ndk ,就像我的一样,它根本无法正常工作,没有任何错误。 我设法手动生成了头文件,以admin身份通过cmd导航到我的java目录,以避免可能需要管理权限的任何错误,然后输入命令javah -d jni -classpath c/path/to/android/sdk/compileplatform/android.jar; c/path/to/app/build/intermediates/classes/debug -force com.package.containing.my.class.andtheclassitself javah -d jni -classpath c/path/to/android/sdk/compileplatform/android.jar; c/path/to/app/build/intermediates/classes/debug -force com.package.containing.my.class.andtheclassitself生成了头文件,然后我继续导航到ndk根目录并输入命令ndk-build NDK_PROJECT_PATH=c/path/to/my/app/src/main APP_BUID_SCRIPT=c/path/to/my/project/Android.mk这会编译我的.so文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM