Android Studio新建项目在源码中编译

新建空白项目

用AS新建默认空项目,代码目录如下:

MyApplication$ tree  -L 4
.
├── Android.bp    // bp编译脚本
├── Android.mk.bak   // mk编译脚本
├── app   // 下面目录结构是AS新建工程目录
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src
│       ├── androidTest
│       │   └── java
│       ├── main
│       │   ├── AndroidManifest.xml
│       │   ├── java
│       │   └── res
│       └── test
│           └── java
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── proguard.flags
└── settings.gradle

源码中编译

编写mk或者bp脚本后,可以将工程拷贝到系统源码中,然后进行单编

mk脚本:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true // 使用aapt2进行编译

LOCAL_MODULE_TAGS := optional // 所有平台下进行编译
LOCAL_PACKAGE_NAME := MyApplication // 应用名
LOCAL_PRIVATE_PLATFORM_APIS := true // sdk的hide的api來编译
LOCAL_MULTILIB=32 // 编译32位app 
LOCAL_STATIC_ANDROID_LIBRARIES := \ // 引用Android系统库
    android-support-v4 \
    android-support-v7-appcompat \
    android-support-v13 \
    android-support-design \

LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main) // 指定java源代码文件
LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml // 指定AndroidManifest
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/app/src/main/res // 指定res  

LOCAL_CERTIFICATE := platform // 使用平台签名

LOCAL_DEX_PREOPT := false // 不进行odex优化
LOCAL_PROGUARD_ENABLED := disabled // 不进行混淆
include $(BUILD_PACKAGE) // 编译生成apk

bp脚本:可以参考~/source/packages/apps/Music

android_app {// 编译生成apk
    name: "MyApplication", // 应用名
    srcs: ["app/src/main/**/*.java"], // 指定java源代码文件
    resource_dirs: ["app/src/main/res"], // 指定res  
    manifest: "app/src/main/AndroidManifest.xml", // 指定AndroidManifest,如果manifest和bp在同一目录,可以不指定
    static_libs: [ // 引用Android系统库
        "android-support-v4",
        "android-support-v7-appcompat",
        "android-support-v7-appcompat",
        "android-support-design"
    ],
    sdk_version: "current",// 类似mk中LOCAL_SDK_VERSION,指定后不能使用系统hideapi
    product_specific: true, // 编译出来放在/product目录下(默认是放在/system目录下)
    optimize: { // 优化混淆配置
        proguard_flags_files: ["proguard.flags"],
    },
}

### 如何在 Android Studio 创建新项目时添加或处理缺失的 libs 文件夹 当在 Android Studio 中创建新的项目时,默认情况下可能不会自动生成 `libs` 文件夹。然而,这个文件夹对于管理本地库文件(如 `.jar`, `.so` 或者其他依赖项)非常重要。 #### 方法一:手动创建 `libs` 文件夹 可以直接在项目的 app 模块根目录下通过右键菜单选择 New -> Directory 来创建名为 `libs` 的文件夹[^1]。一旦创建好此文件夹,则可以将所需的第三方库文件放入其中,并确保这些资源被正确配置以便于编译过程能够识别它们。 #### 方法二:利用 Gradle 配置自动引入外部库 如果希望更方便地管理和引用外部库而不必每次都手动放置文件到特定位置,可以在模块级别的 build.gradle 文件内指定依赖关系: ```groovy dependencies { implementation files('libs/your-library.jar') } ``` 这段代码告诉构建工具去查找位于 `libs` 下面的具体 jar 库并将其加入到工程当中。当然,如果有多个这样的静态库或者是动态链接库(.so),同样可以通过上述方式来声明[^2]。 #### 处理重复 SO 文件冲突的情况 有时可能会遇到不同版本或是来自不同源码路径下的相同名称共享对象(so)文件共存的问题,比如提示 "More than one file was found with OS independent path". 对于此类情况,应该调整 `build.gradle` 中的设置如下所示以避免冲突: ```groovy android { ... packagingOptions { pickFirst 'lib/arm64-v8a/xxxxx.so' pickFirst 'lib/armeabi-v7a/xxxxxx.so' } } ``` 这里定义了一个策略用于挑选优先级最高的 so 文件实例参与最终 APK 构建过程中[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值