当前位置:首页 » 安卓系统 » androidjar包编译

androidjar包编译

发布时间: 2022-08-27 20:58:58

A. 如何制作Jar包并在android中调用jar包

新建android工程,然后右击,点击导出,选择导出类型为java下的JAR file,在java file specification 中不要选择androidmanifest.xml和res文件夹,就可以了。
否则在调用jar包的时候会出现“Error generating final archive: Found plicate file for APK: AndroidManifes”这个错误。

调用jar包大同小异的两个方法:
方法一:

如果在android用调用jar包,需要在工程的属性的Java build path中点击Add external JARS(也可以选择Add Library)添加jar包,在程序中调用调用jar包中的函数即可。
方法二:

Android项目常常需要引用自定义的或者外部的jar包,这里提供一些经验,供参考。

1. 通常情况下,直接将jar包在Eclipse工程中的libs目录下,就可以了,Eclipse就会自动引用过来,代码中有红叉的地方也就会消失了。

2. 查看build path中order and export中的private Libaries和Dependencies是否勾选,正确的做法是勾选。

再clean整个工程,再运行可否。

3. 你的jar文件必须也是由Android工程创建的,否则,会发生“"java.lang.NoClassDefFoundError“等错误,下面是一个错误:

12-09 00:43:05.172: E/dalvikvm(4456): Could not find class
'com.example.test4androidjar2.Jar4Android', referenced from method
com.example.filemanagertest4android.MainActivity$1.onClick

4. 你的jar包必须是在Android下面编辑和编译,打包,不能在java中进行打包。

B. maven管理android的jar包,打包时无法自动编译到apk

jar包的东西要格外声明包括进去哦,如果你已经声明,还会报classNotFound那你就得看看是不是路径什么的没有配置对,这个东西就是这两个方面容易出错,我用ant打包过,有过最无语的错误就是jdk版本不兼容~所以楼主再仔细核对一下

C. 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

D. 我把android.jar包进行反编译,为什么只有方法而没有实现

1、混淆安卓自带了混淆法,具体请网络关键词:proguard,但是混淆只是加大了反编译的难度,可以这么说,即便混淆了,只要有足够的耐心,破解指日可待。2、使用linux的静态链接so库这类似于windows平台的dll库,如果使用了so库,那么这个安卓程序几乎不可能被反编译到原来的代码,所以,重要的代码可以放入so库。但是,道高一尺,魔高一丈,即便是so库,也还是会有法能破解,但是,要获得真正的源码,几乎不可能无源代码的安卓APK反编译、修改,只有你想不到,没有做不到@@724949472

E. 如何解决Android 6.0中无法编译出jar

1、将jar包放入项目里的libs文件夹中。
2、在project选中jar包点击右键"Add as library"。
3、这两步是网上比较容易找到的,但此时项目仍然是无法正常编译的,这时需要在项目的build.gradle文件里的dependencies节加入 dependencies
{
compile files('libs/android-support-v4.jar')
compile files('libs/xxxx.jar')
}
4、此时项目正常编译并运行了,但当自己的代码中真正创建了引用jar里的类实例时,有可能系统会抛出异常NoClassDefFoundError,这个时候可以按以下步骤操作:

 进入命令提示符窗口。
 定位到项目的根目录,即build.gradle所在的目录。
 运行 "{android studio 安装目录}\sdk\tools\templates\gradle\wrapper\gradlew.bat" clean
 重新编译运行项目

F. 求解答,Android源码编译时怎的添加第三方jar包

Android.mk添加第三方jar包

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := test

LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2.8.14.jar \
jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
logging:lib/commons-logging.jar \
jackson-core:lib/jackson-core-asl-1.6.2.jar \
javatar:lib/javatar-2.5.jar \
log4j:lib/log4j-1.2.15.jar
include $(BUILD_MULTI_PREBUILT)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

以上是我的一个项目中所需要的第三方jar包,主要参考了Android源码中的Calculator应用,该应用也引用了一个第三方的jar包arity-2.1.2.jar。
需要注意的是,当你要引用的jar包不止一个时,有两个关键的地方需要注意的。
LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2.8.14.jar \
jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
logging:lib/commons-logging.jar \
jackson-core:lib/jackson-core-asl-1.6.2.jar \
javatar:lib/javatar-2.5.jar \
log4j:lib/log4j-1.2.15.jar
xsocket jackson-mapper logging jackson-core javatar log4j这几个只是名字,可以随便取。LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES后面才是真正其作用的地方。如:
xsocket:lib/xSocket-2.8.14.jar 引用的是lib目录中的xSocket-2.8.14.jar。
还要注意的是 := 不要写成了+=了哦。

附:编写各种类型的Android.mk,出处我忘记了,是以前浏览是拷贝下来的。
一、编译一个简单的APK
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
# Tell it to build an APK
include $(BUILD_PACKAGE)
二、编译一个依赖静态.jar文件的APK
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)
注:LOCAL_STATIC_JAVA_LIBRARIES 后面应是你的APK程序所需要的JAVA库的JAR文件名。
三、编译一个需要platform key签名的APK
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)
注:LOCAL_CERTIFICATE 后面应该是签名文件的文件名
四、编译一个需要特殊vendor key签名的APK
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)
五、装载一个普通的第三方APK
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)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
六、装载需要.so(动态库)的第三方apk
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := input_android_v1.1_1000e
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
#################################################################
####### the library to /system/lib #########################
#################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := libinputcore.so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
LOCAL_SRC_FILES := lib/$(LOCAL_MODULE)
OVERRIDE_BUILD_MODULE_PATH := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)
include $(BUILD_PREBUILT)
七、编译一个静态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)
注:LOCAL_JAVA_LIBRARIES表示生成的java库的jar文件名。

G. Android怎么将开源库编译成jar包

1. 开源库的jar可以直接拿来在Android里面编译使用,可能涉及一些依赖的库。

2. 如果需要编译Jar包,有两种选择:
第一种: 基于Java方式的Jar包,工程导入后,通过export方式导出的jar。
第二种: 基于Android方式的Jar包,工程通过Android lib project的方式导入的。具体步骤:
new->project...->Android Project from Existing Code->填入路径->Finish->右击工程->Export...->Java->JAR file
理论上如果开源库不是基于Android开发的话,第二种方式导出Jar,估计需要比较久的解决依赖的过程。

H. Android Studio 怎么添加使用第三方jar包及无法编译的问题解决方法

Android Studio中jar包放在libs目录下,jni编译的so库存放在libs目录下的armeabi目录中。导入步骤:1. 右键app目录,find path,即打开app目录。2. 在libs目录下新建文件夹,名字为 armeabi,注意名字不能改。3. 将jar复制到libs目录下。4.将.so库文件复制到armeabi目录下即可。

I. android jack 编译 jar 文件在哪

用jack编译器编译出来的静态JAR包,不会再生成classes.jar等中间文件了,而是直接生成classes.jack文件,问下如果有APK代码需要链接这个.jack(就像链接.jar一样),那么,在android studio中怎么配置jack呢,只要在app 的gradle里面添加如下配置就可以了

热点内容
值班发布源码 发布:2024-10-25 19:23:50 浏览:369
php实现注册登陆 发布:2024-10-25 19:22:56 浏览:545
android开发库 发布:2024-10-25 18:50:28 浏览:231
优酷路由宝存储 发布:2024-10-25 18:41:37 浏览:934
pythoncmdb 发布:2024-10-25 18:41:29 浏览:200
安卓触控屏不灵怎么办 发布:2024-10-25 17:31:22 浏览:872
中信银行信用卡激活后密码是多少 发布:2024-10-25 17:28:31 浏览:506
cocos2d30编译 发布:2024-10-25 17:20:51 浏览:994
app直播平台源码 发布:2024-10-25 17:19:57 浏览:224
asp文件上传带进度条 发布:2024-10-25 17:19:54 浏览:658