當前位置:首頁 » 安卓系統 » androidso編寫

androidso編寫

發布時間: 2023-08-21 12:54:23

❶ android 怎麼把多個so文件編譯成jar

一共分為2步:

1.在java中編寫要調用的靜態方法和需要載入的庫,並生成頭文件。

2.配置gradle

3.配置Android.mk文件和application.mk文件

下面一步步的走:

首先需要在Java類中聲明要調用的方法,以及要載入的庫,我們在包下新建一個jniUtil類,如下所示

[plain]view plain

publicclassjniUtil{

//要載入的庫,生成的庫格式為:lib+庫名.so

static{System.loadLibrary("hello-jni");}

//要調用的本地方法,在c文件中該方法名稱格式為:java_包名_類名_方法名

();

}


注意:在編譯時該類中不能有漢字,包括注釋,否則會出現編碼GBK的不可映射字元錯誤。
接下來就是利用external Tools生成頭文件.h,這里可參考點擊打開鏈接
然後就會在main目錄下生成Jni文件夾,並且包含.h文件。下面就是編寫C文件,或者可以拷貝已經寫好的C文件放置在該jni文件夾中.

2.配置gradle
我們這里不用gradle 去編譯,而是只讓他去載入已經生成的so庫,改用android.mk 去編譯(稍後配置android.mk)
在app的build.gradle 下的android 標簽下添加:

[plain]view plain

sourceSets{

main{

jni.srcDirs=[]//禁止gradle自動編譯,使用已經編譯好的So庫

jniLibs.srcDirs=['src/main/jniLibs','libs']//指向要使用的庫文件//的路徑,前邊的是自己項目的,後邊的是第三方的so

}

}


從上面可以看出,我們生成的庫是放在
src/main/jniLibs
目錄下面的,那麼這個是如何配置呢?還是在該gradle下面配置ndk的編譯腳本,注意放在android標簽外面:

[plain]view plain

tasks.withType(JavaCompile){

compileTask->compileTask.dependsOnCopyToJniLibs

}

taskndkBuild(type:Exec,description:'CompileJNIsourceviaNDK'){

Propertiesproperties=newProperties()

properties.load(project.rootProject.file('local.properties').newDataInputStream())

defndkDir=properties.getProperty('ndk.dir')

commandLine"$ndkDir/ndk-build.cmd","NDK_PROJECT_PATH=$projectDir.absolutePath\build","APP_BUILD_SCRIPT=$projectDir.absolutePath\src\main\jni\Android.mk","NDK_APPLICATION_MK=$projectDir.absolutePath\src\main\jni\Application.mk"

//你自己的mk文件目錄

}


在ndkbuild完成後把生成的so文件復制到jniLibs,這里和上面配置的載入so文件路徑要一致哦


[plain]view plain

taskCopyToJniLibs(type:Copy,dependsOn:'ndkBuild',description:'thenativelibstojniLibs'){

fromfileTree(dir:file(buildDir.absolutePath+'/libs'),include:'**/*.so')

intofile('src/main/jniLibs')

}


新建Android.mk和application.mk,這里我把Android.mk和application.mk放在jni文件夾下了,具體可以自己修改。默認生成的SO文件會在build下面的libs中,我們拷貝出來放到src/main/jniLibs下面。

3.配置Android.mk和Application.mk

❷ android中如何編譯出64位so文件

如果是在linux下編譯Android源碼,有可能是兩個原因:
1. lunch命令有32位和64位的區別,注意選能夠編譯64位so的命令

2. mk文件中有LOCAL_MODULE_PATH的值比如為$(TARGET_OUT_SHARED_LIBRARIES)/hw的改為LOCAL_MODULE_RELATIVE_PATH := hw,後一種可以分別在lib和lib64下分別生成32位和64位的so文件,這個看看編譯後的信息就知道了.

❸ android studio開發工具編譯C、c++代碼生成so文件

目前android studio 還不支持 ndk開發,如下圖是官網的說明:

❹ android 怎麼編譯so文件

android NDK編譯多個so文件

android編譯系統的makefile文件Android.mk寫法如下

(1)Android.mk文件首先需要指定LOCAL_PATH變數,用於查找源文件。由於一般情況下

Android.mk和需要編譯的源文件在同一目錄下,所以定義成如下形式:

LOCAL_PATH:=$(call my-dir)

上面的語句的意思是將LOCAL_PATH變數定義成本文件所在目錄路徑。

(2)Android.mk中可以定義多個編譯模塊,每個編譯模塊都是以include $(CLEAR_VARS)開始

以include $(BUILD_XXX)結束。

include $(CLEAR_VARS)

CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除除LOCAL_PATH以外的所有LOCAL_XXX變數,

如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。

include $(BUILD_STATIC_LIBRARY)表示編譯成靜態庫

include $(BUILD_SHARED_LIBRARY)表示編譯成動態庫。

include $(BUILD_EXECUTABLE)表示編譯成可執行程序

(3)舉例如下(frameworks/base/libs/audioflinger/Android.mk):

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS) 模塊一

ifeq ($(AUDIO_POLICY_TEST),true)

ENABLE_AUDIO_DUMP := true

endif

LOCAL_SRC_FILES:= \

AudioHardwareGeneric.cpp \

AudioHardwareStub.cpp \

AudioHardwareInterface.cpp

ifeq ($(ENABLE_AUDIO_DUMP),true)

LOCAL_SRC_FILES += AudioDumpInterface.cpp

LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP

endif

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_CFLAGS += -DGENERIC_AUDIO

endif

LOCAL_MODULE:= libaudiointerface

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_SRC_FILES += A2dpAudioInterface.cpp

LOCAL_SHARED_LIBRARIES += liba2dp

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_C_INCLUDES += $(call include-path-for, bluez)

endif

include $(BUILD_STATIC_LIBRARY) 模塊一編譯成靜態庫

include $(CLEAR_VARS) 模塊二

LOCAL_SRC_FILES:= \

AudioPolicyManagerBase.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libmedia

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudiopolicybase

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_A2DP

endif

ifeq ($(AUDIO_POLICY_TEST),true)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

include $(BUILD_STATIC_LIBRARY) 模塊二編譯成靜態庫

include $(CLEAR_VARS) 模塊三

LOCAL_SRC_FILES:= \

AudioFlinger.cpp \

AudioMixer.cpp.arm \

AudioResampler.cpp.arm \

AudioResamplerSinc.cpp.arm \

AudioResamplerCubic.cpp.arm \

AudioPolicyService.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase

LOCAL_CFLAGS += -DGENERIC_AUDIO

else

LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy

endif

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudioflinger

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_SHARED_LIBRARIES += liba2dp

endif

ifeq ($(AUDIO_POLICY_TEST),true)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

ifeq ($(TARGET_SIMULATOR),true)

ifeq ($(HOST_OS),linux)

LOCAL_LDLIBS += -lrt -lpthread

endif

endif

ifeq ($(BOARD_USE_LVMX),true)

LOCAL_CFLAGS += -DLVMX

LOCAL_C_INCLUDES += vendor/nxp

LOCAL_STATIC_LIBRARIES += liblifevibes

LOCAL_SHARED_LIBRARIES += liblvmxservice

# LOCAL_SHARED_LIBRARIES += liblvmxipc

endif

include $(BUILD_SHARED_LIBRARY) 模塊三編譯成動態庫

(4)編譯一個應用程序(APK)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory-->直譯(建立在java子目錄中的所有Java文件)

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build-->直譯(創建APK的名稱)

LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK-->直譯(告訴它來建立一個APK)

include $(BUILD_PACKAGE)

(5)編譯一個依賴於靜態Java庫(static.jar)的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# List of static libraries to include in the package

LOCAL_STATIC_JAVA_LIBRARIES := static-library

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK

include $(BUILD_PACKAGE)

(6)編譯一個需要用平台的key簽名的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := platform

# Tell it to build an APK

include $(BUILD_PACKAGE)

(7)編譯一個需要用特定key前面的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := vendor/example/certs/app

# Tell it to build an APK

include $(BUILD_PACKAGE)

(8)添加一個預編譯應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Mole name should match apk name to be installed.

LOCAL_MODULE := LocalMoleName

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)

(9)添加一個靜態JAVA庫

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Any libraries that this library depends on

LOCAL_JAVA_LIBRARIES := android.test.runner

# The name of the jar file to create

LOCAL_MODULE := sample

# Build a static jar file.

include $(BUILD_STATIC_JAVA_LIBRARY)

(10)Android.mk的編譯模塊中間可以定義相關的編譯內容,也就是指定相關的變數如下:

LOCAL_AAPT_FLAGS

LOCAL_ACP_UNAVAILABLE

LOCAL_ADDITIONAL_JAVA_DIR

LOCAL_AIDL_INCLUDES

LOCAL_ALLOW_UNDEFINED_SYMBOLS

LOCAL_ARM_MODE

LOCAL_ASFLAGS

LOCAL_ASSET_DIR

LOCAL_ASSET_FILES 在Android.mk文件中編譯應用程序(BUILD_PACKAGE)時設置此變數,表示資源文件,

通常會定義成LOCAL_ASSET_FILES += $(call find-subdir-assets)

LOCAL_BUILT_MODULE_STEM

LOCAL_C_INCLUDES 額外的C/C++編譯頭文件路徑,用LOCAL_PATH表示本文件所在目錄

舉例如下:

LOCAL_C_INCLUDES += extlibs/zlib-1.2.3

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_CC 指定C編譯器

LOCAL_CERTIFICATE 簽名認證

LOCAL_CFLAGS 為C/C++編譯器定義額外的標志(如宏定義),舉例:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1

LOCAL_CLASSPATH

LOCAL_COMPRESS_MODULE_SYMBOLS

LOCAL_COPY_HEADERS install應用程序時需要復制的頭文件,必須同時定義LOCAL_COPY_HEADERS_TO

LOCAL_COPY_HEADERS_TO install應用程序時復制頭文件的目的路徑

LOCAL_CPP_EXTENSION 如果你的C++文件不是以cpp為文件後綴,你可以通過LOCAL_CPP_EXTENSION指定C++文件後綴名

如:LOCAL_CPP_EXTENSION := .cc

注意統一模塊中C++文件後綴必須保持一致。

LOCAL_CPPFLAGS 傳遞額外的標志給C++編譯器,如:LOCAL_CPPFLAGS += -ffriend-injection

LOCAL_CXX 指定C++編譯器

LOCAL_DX_FLAGS

LOCAL_EXPORT_PACKAGE_RESOURCES

LOCAL_FORCE_STATIC_EXECUTABLE 如果編譯的可執行程序要進行靜態鏈接(執行時不依賴於任何動態庫),則設置LOCAL_FORCE_STATIC_EXECUTABLE:=true

目前只有libc有靜態庫形式,這個只有文件系統中/sbin目錄下的應用程序會用到,這個目錄下的應用程序在運行時通常

文件系統的其它部分還沒有載入,所以必須進行靜態鏈接。

LOCAL_GENERATED_SOURCES

LOCAL_INSTRUMENTATION_FOR

LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME

LOCAL_INTERMEDIATE_SOURCES

LOCAL_INTERMEDIATE_TARGETS

LOCAL_IS_HOST_MODULE

LOCAL_JAR_MANIFEST

LOCAL_JARJAR_RULES

LOCAL_JAVA_LIBRARIES 編譯java應用程序和庫的時候指定包含的java類庫,目前有core和framework兩種

多數情況下定義成:LOCAL_JAVA_LIBRARIES := core framework

注意LOCAL_JAVA_LIBRARIES不是必須的,而且編譯APK時不允許定義(系統會自動添加)

LOCAL_JAVA_RESOURCE_DIRS

LOCAL_JAVA_RESOURCE_FILES

LOCAL_JNI_SHARED_LIBRARIES

LOCAL_LDFLAGS 傳遞額外的參數給連接器(務必注意參數的順序)

LOCAL_LDLIBS 為可執行程序或者庫的編譯指定額外的庫,指定庫以"-lxxx"格式,舉例:

LOCAL_LDLIBS += -lcurses -lpthread

LOCAL_LDLIBS += -Wl,-z,origin

LOCAL_MODULE 生成的模塊的名稱(注意應用程序名稱用LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)

LOCAL_MODULE_PATH 生成模塊的路徑

LOCAL_MODULE_STEM

LOCAL_MODULE_TAGS 生成模塊的標記

LOCAL_NO_DEFAULT_COMPILER_FLAGS

LOCAL_NO_EMMA_COMPILE

LOCAL_NO_EMMA_INSTRUMENT

LOCAL_NO_STANDARD_LIBRARIES

LOCAL_OVERRIDES_PACKAGES

LOCAL_PACKAGE_NAME APK應用程序的名稱

LOCAL_POST_PROCESS_COMMAND

LOCAL_PREBUILT_EXECUTABLES 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用,指定需要復制的可執行文件

LOCAL_PREBUILT_JAVA_LIBRARIES

LOCAL_PREBUILT_LIBS 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用, 指定需要復制的庫.

LOCAL_PREBUILT_OBJ_FILES

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES

LOCAL_PRELINK_MODULE 是否需要預連接處理(默認需要,用來做動態庫優化)

LOCAL_REQUIRED_MODULES 指定模塊運行所依賴的模塊(模塊安裝時將會同步安裝它所依賴的模塊)

LOCAL_RESOURCE_DIR

LOCAL_SDK_VERSION

LOCAL_SHARED_LIBRARIES 可鏈接動態庫

LOCAL_SRC_FILES 編譯源文件

LOCAL_STATIC_JAVA_LIBRARIES

LOCAL_STATIC_LIBRARIES 可鏈接靜態庫

LOCAL_UNINSTALLABLE_MODULE

LOCAL_UNSTRIPPED_PATH

LOCAL_WHOLE_STATIC_LIBRARIES 指定模塊所需要載入的完整靜態庫(這些精通庫在鏈接是不允許鏈接器刪除其中無用的代碼)

LOCAL_YACCFLAGS

OVERRIDE_BUILT_MODULE_PATH

❺ 在Windows下CodeBlocks能編譯Android下的.so和.a嗎

可以使用的。解析:首先Android就是Linux內核。android應用程序開發環境:包括eclipse、java、androidsdk、adt等。安裝android-ndk開發包,這個開發包可以在googleandroid官網下載:通過這個開發包的工具才能將androidjni的C/C++的代碼編譯成庫android的NDK開發需要在linux下進行:因為需要把C/C++編寫的代碼生成能在arm上運行的.so文件,這就需要用到交叉編譯環境,而交叉編譯需要在linux系統下才能完成。備註:NDK編譯步驟:1.選擇ndk自帶的例子hello-jni,位於E:\android-ndk-r5\samples\hello-jni(根據具體的安裝位置而定)。2.運行cygwin,輸入命令cd/cygdrive/e/android-ndk-r5/samples/hello-jni,進入到E:\android-ndk-r5\samples\hello-jni目錄。3.輸入$NDK/ndk-build,執行成功後,它會自動生成一個libs目錄,把編譯生成的.so文件放在裡面。($NDK是調用我們之前配置好的環境變數,ndk-build是調用ndk的編譯程序)4.此時去hello-jni的libs目錄下看有沒有生成的.so文件,如果有,ndk就運行正常了。

❻ android studio怎麼生成.so文件

1、編譯環境的搭建

正所謂:「工欲善其事必先利其器」嘛,所以先把改准備工具准備一下,因為是在studio下編譯的,所以啊,什麼studio、什麼sdk、什麼jdk,這些都自己去弄吧,這里說一下ndk這個編譯C文件工具怎麼下載安裝;

下載完了之後直接是一個zip的壓縮包,解壓即可;

然後你會在local.properties文件中看到:

不要急,還沒有完,ndk環境搭建還有最後一步,在gradle.properties的文件末尾加上android.useDeprecatedNdk=true這段代碼:

好了,到此處環境就搭建完畢了。

2、java代碼和C代碼的編寫步驟及過程

首先新建一個java類JNIUtils.java

public class JNIUtils {

static {

System.loadLibrary("huazict");

}

//java調C中的方法都需要用native聲明且方法名必須和c的方法名一樣

public native String getString();

}

然後如下圖所示重新Make Project一下工程:

會在工程目錄E:\work\MyApplication\stujni\build\intermediates\classes\debug\com\huazi\stujni\jni中看到自己編譯後的class文件JNIUtils.class

其次就是生成.h文件了

在studio打開Terminal命令行工具,打開步驟是View->Tool Windows->Terminal
(或直接按Alt+F12

然後在命令行中先進入到工程的main目錄下

輸入命令:javah -d jni -classpath 自己編譯後的class文件的絕對路徑

例如:javah -d jni -classpath
E:\work\MyApplication\stujni\build\intermediates\classes\debug
com.huazi.stujni.jni.JNIUtils(注意debug後的空格)

看到上圖,圖中命令行中是直接進入到了工程的main目錄下(在哪個目錄下運行就會在哪個目錄下自動生成jni文件夾),按回車之後就會在main目錄下生成jni文件夾,同時生成.h文件,

這個文件.h文件不需要做任何修改,默認即可。

現在我們來寫一個test的C文件huazict.c同.h文件一樣放到jni文件夾下,代碼如下:

#include "com_huazi_stujni_jni_JNIUtils.h"

/**

* 上邊的引用標簽一定是.h的文件名家後綴,方法名一定要和.h文件中的方法名稱一樣

*/

JNIEXPORT jstring JNICALL Java_com_huazi_stujni_jni_JNIUtils_getString

(JNIEnv *env, jobject obj) {

return (*env)->NewStringUTF(env, "這是我測試的jni");

}

最後在構建文件中的默認配置中加上:

//ndk編譯生成.so文件

ndk {

moleName "huazict" //生成的so名字

abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種abi體系結構下的so庫。

}

到這里,通過jni調C就完成了,現在我們來測試一下,寫個TextView顯示一下調用的C:

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView tv = (TextView)findViewById(R.id.tv);

tv.setText(new JNIUtils().getString());

}

}

ok,沒問題,可以調用,其實也沒有想像中的那麼難,是吧!

三、調用編譯過的.so庫

上邊編譯完成了,有人會問:我要的是編譯後的.so庫,別人用的時候直接拿來用就可以了,那編譯後的.so庫在哪呢?

根據這個路徑就可以找到指定輸出的三種體系結構下的.so庫文件,然後把.so文件復制出來,如下圖所示的放到相應的文件夾下就ok了:

再次運行,結果還是一樣的,跟上邊貼的那張圖的顯示效果是是一樣的,同樣能調用到,代碼我就不上傳了,都在上邊貼上去了,而且也上傳不了,公司的所有文件都是加密的,想上傳都上傳不了。

到這里,整個jni的調用過程就結束了,包括調用jni需要的環境以及調用的過程,最後.so文件的導出,都在上邊了,如果上邊的jni調用過程有什麼問題,歡迎留言,謝謝。

❼ android注入so怎麼使用

dhrurthr64uhtdh

❽ android so文件怎麼用

相信很多朋友在使用Androidstudio開發中,遇到過如何引入第三方so文件的問題,然而第三方官方僅僅給出了ADT環境下的集成方式。

Android studio中默認使用的是gradle編譯方式,與ADT編輯方式不一樣,那麼so文件應當如何引入呢?


其實很簡單。這里以集成JPUSH為例,看一下so文件如何引入到編譯環境,最終到JNI直接可以調用該so文件。


首先,在我們的Mole的根目錄中建立libs目錄,將jpush集成SDK中的so文件分別拷入,截圖如下:



然後就是編寫我們的build.gradle文件。

關於so文件引入的配置很簡單,代碼配置如下:


[html]view plainprint?

tasknativeLibsToJar(type:Zip,description:""){

destinationDirfile("$projectDir/libs")

baseName"Native_Libs2"

extension"jar"

fromfileTree(dir:"libs",include:"**/*.so")

into"lib"

}

tasks.withType(JavaCompile){

compileTask->compileTask.dependsOn(nativeLibsToJar)

}




自定義一個任務,在其中指定項目所依賴的so文件的目錄,這里用了**/*.so來寫,為了省事,指定需要拷入的目錄 into "lib",那麼動態運行庫就被拷入到lib目錄中。

完整的build.gradle文件如下:


[html]view plainprint?

applyplugin:'com.android.application'

android{

compileSdkVersion21

buildToolsVersion"21.1.0"

defaultConfig{

applicationId"com.wujay.footerballstar"

minSdkVersion8

targetSdkVersion21

versionCode1

versionName"1.0"

}

buildTypes{

release{

runProguardfalse

('proguard-android.txt'),'proguard-rules.pro'

}

}

tasknativeLibsToJar(type:Zip,description:""){

destinationDirfile("$projectDir/libs")

baseName"Native_Libs2"

extension"jar"

fromfileTree(dir:"libs",include:"**/*.so")

into"lib"

}

tasks.withType(JavaCompile){

compileTask->compileTask.dependsOn(nativeLibsToJar)

}

}

dependencies{

compilefileTree(dir:'libs',include:['*.jar'])

compile'com.android.support:appcompat-v7:21.0.0'

compilefiles('libs/jpush-sdk-release1.7.2.jar')

compilefiles('libs/umeng_sdk.jar')

compilefiles('libs/libammsdk.jar')

}

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:235
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726