簡體   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