`
sharp2wing
  • 浏览: 270174 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

android打包so文件到apk

阅读更多
使用android SDK原代码 开发APK,将so文件打包进apk,这样可以只提供给客户一个apk.
1.含义全代码的so打包.
a)建立工程,并使用本地调用,java文件如下
view source
print?
01.package test.jni;
02.import android.app.Activity;
03.import android.os.Bundle;
04.import android.widget.TextView;
05.public class jnitest extends Activity {
06.    /** Called when the activity is first created. */
07.    @Override
08.    public void onCreate(Bundle savedInstanceState) {
09.        super.onCreate(savedInstanceState);
10.        TextView  tv = new TextView(this);
11.        int       x  = 55;
12.        int       y  = 8;
13.        System.loadLibrary("apptest");
14.        //System.loadLibrary("testapi");
15.        int  z = appadd(x, y);
16.        tv.setText( x + "+" + y + "=" + z );
17.        setContentView(tv);
18.    }
19.    public native int appadd(int  x, int  y);
20.}

b)在工程的根目录建立Android.mk,内容如下.
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := user eng
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := jnitest
LOCAL_JNI_SHARED_LIBRARIES := libapptest
include $(BUILD_PACKAGE)
include $(LOCAL_PATH)/jni/Android.mk
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
其中LOCAL_MODULE_TAGS名字要和目标系统一致,否则编译产生的apk文件不能安装到目标系统,.
LOCAL_JNI_SHARED_LIBRARIES := libapptest 把我们另外编译成的so文件放到apk文件里的libs/armeabi里
include $(LOCAL_PATH)/jni/Android.mk为了编译本地文件成为so

c)在工程根目录创建jni文件夹,在jni文件里创建Android.mk和callapp.c,他们内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := user eng
LOCAL_MODULE := libapptest
LOCAL_SRC_FILES := callapp.c
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE)
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE_TAGS :要和工程的一致,否则编译不通过
LOCAL_C_INCLUDES += \$(JNI_H_INCLUDE) 为了让jni编译通过,因为工程通过jni调用本地库。

callapp.c文件内容如下:
view source
print?
1.#include <jni.h>
2.JNIEXPORT jint JNICALL Java_test_jni_jnitest_appadd
3.  (JNIEnv *env, jobject obj, jint x, jint y){
4.    return x +y;
5.}
d)把工程文件放到SDK platform\packages\apps目录下,然后进入该目录,命令里输入mm,进行该工程的编译.(之前要再platform之前把工程目标设定好)

e)编译出来的apk 在platform/out/target/product/sk886x/system/app里可以找到,其中sk886x 是目标平台. 打开该apk文件,可以看到libapptest.so存在在包里的libs/armeabi文件夹里. 运行该apk,可以正常运行,显示正确答案.
分享到:
评论

相关推荐

    Android Studio打包.so库到apk中实例详解

    Android Studio打包.so库到apk中实例详解 由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个.so库文件之后,eclipse工具就会自动把这些库导入到apk中。而Android Studio目前为止(1.1.0版本)还无法...

    android串口so文件.zip

    在项目的jniLibs目录下,创建对应的子目录(如armeabi-v7a和arm64-v8a),然后将对应的.so文件放入相应目录,Gradle会在构建时自动将这些库打包到APK中。 为了确保串口通信的稳定性和可靠性,还需要关注以下几个...

    Android之动态库生成并打包到APK中(Windows下)

    Android内核是Linux的,而linux的动态库是*.so文件,那么在windows要如何生成并打包到APK中呢?实现这一过程,大致需要以下几个步骤: 1、搭建编译环境 2、使用JNI生成相应的头文件 3、编写动态库的实现 4、生成动态...

    android将lib库打包成apk安装

    本教程将详细解释如何将C编写的动态链接库(.so文件,即lib库)整合到Android应用中,并打包成APK进行安装。 1. **创建JNI接口** 在Java代码中,我们需要定义JNI接口,这些接口将被C/C++代码实现。使用`native`...

    VLC for Android 3.1.5 x86_64版apk、aar及so

    - 由于文件大小限制,VLC for Android 3.1.5的x86_64版本的APK、aar和so库被分开上传。这通常是为了避免单个文件过大导致的下载或传输问题。用户在安装时需要确保选择与他们设备兼容的版本进行下载。 总结,VLC ...

    android ijkplayer完整so库0.8.8

    在Android应用中,开发者通常需要将SO文件打包到APK中,以便运行时加载并使用ijkplayer的功能。 6. **使用步骤** 使用ijkplayer时,开发者需要先将ijkplayer库导入项目,配置项目的build.gradle文件,然后在Java或...

    Android13怎么内置带so的apk

    例如,如果.so文件涉及到文件系统的操作,需要在`AndroidManifest.xml`中添加`READ_EXTERNAL_STORAGE`或`WRITE_EXTERNAL_STORAGE`权限。 3. **复制.so文件**: - 描述中提到的"copy"方法是指在安装过程中或安装后...

    android 注入so代码

    在Android开发中,有时我们需要利用C或C++编写性能高效的代码,这些代码通常被打包成动态链接库(.so文件),然后在Java层通过JNI(Java Native Interface)进行调用。"android 注入so代码"这个主题涉及到的是如何将...

    Android SO文件保护OLLVM混淆加固——混淆篇(二)

    5. **打包并集成到Android应用**:将混淆后的SO文件放入应用的jniLibs目录下,然后按照正常的流程打包APK。 6. **测试与调试**:混淆可能会引入额外的错误,因此混淆后需要进行充分的测试,确保应用的功能完整性。 ...

    androidapk文件

    当开发者完成一个Android应用的开发后,会通过编译、打包过程生成这个APK文件,用户可以通过安装APK来在Android设备上运行应用程序。 APK文件包含了以下组件: 1. **DEX文件**:包含应用程序的字节码(Dalvik ...

    android安卓app编译原理,build生成APK的过程解析.如何将第三方so文件打包进apk中

    android 安卓app编译生成APK的过程解析.如何将第三方so文件打包进apk中 1.生成R.java文件 2.编译aidl文件,包括java静态库 3.编译java源文件 4.将jar包装换为dex文件 ...

    编译so文件 Unity调用so文件样例

    2. **放置SO文件**:将生成的.so文件放入`Assets/Plugins/Android`目录。不同ABI的.so文件应放在对应的子目录下,例如`armeabi-v7a`、`arm64-v8a`等。 3. **编写C#脚本**:在Unity中创建一个新的C#脚本,暴露Java层...

    Androidapk反编译之androidAPK有效加密方法.pdf

    通过对 Android APK 的反编译和安全检测,我们可以看到混淆代码和防二次打包已经无用,而 DEX、RES、SO 库等文件的加密是有效的,因为我们根本无法拿到里面的代码,无法进行任何修改。这是我的 Android APK 防止破解...

    freetype android 编译so库

    这样,Android Studio会在构建APK时自动将它们打包。 至此,Freetype库已在Android环境中编译完成,可以用于Android应用的原生代码中。在使用Freetype库时,确保遵循其API文档,正确地加载和渲染字体,以实现高效且...

    Android.mk编译内置无源码apk

    总结来说,编译内置无源码的APK涉及的主要步骤包括:创建目标目录,放置APK文件,编写`Android.mk`文件来定义编译规则,然后通过Android构建系统将APK集成到系统镜像中。这是一项关键的系统定制工作,对于开发者来说...

    Android-增强型apkanalyzer支持apapaarjarsoawb等zip文件使用apkanalyzer打开

    总结起来,增强型Apk Analyzer是Android开发中一个非常有价值的工具,它扩展了原始Apk Analyzer的功能,涵盖了更多类型的zip文件,包括ap_、ap、aar、jar、so和awb。这个Android Studio插件对于优化代码、减小程序...

    GDAL Android包含so库.zip

    2. **处理SO库**:GDAL的本地库文件(.so)按照不同的架构(armeabi, armeabi-v7a, arm64-v8a, x86, x86_64等)打包在不同的子目录下。在Android Studio中,你需要创建对应的`jniLibs`目录结构,并将对应的.so文件放...

    so文件生成与使用

    这样,当APK打包时,Android Gradle插件会自动包含相应架构的.so文件。 在Java代码中,可以使用Java Native Interface (JNI)来调用.so文件中的C/C++函数。首先,需要创建一个Java类,声明native方法,并使用`System...

Global site tag (gtag.js) - Google Analytics