关于修改高通8976android8版本源码的双卡单卡的设置方式

关于修改高通8976android8版本源码的双卡单卡的设置方式,第1张

android studio external libraries导入的库能修改源码

Android Studio 添加第三方库的方法为:

开发过程中想要导入第三方类库和Eclipse也是有差别的,导入SlidingMenu这个类库,从github上下载下来解压到项目目录下。

然后重启android studio就会发现项目下面有了类库。

需要修改的是根目录的下的settingsgradle这个文件,一定要注意是根目录下的。在里面添加代码。

下来我要修改的是App目录下的buildgradle,这里要注意是App目录下的buildgradle,添加如下代码

dependencies {

compile project(’:SlidingMenu-master’)

}

android sdk源码中怎么没有>

源码配置双卡还是单卡的路径在msm8976_android8\device\qcom\common\bacemk

ifeq ($(TARGET_USES_QCOM_BSP_ATEL),true)

    PRODUCT_PROPERTY_OVERRIDES += persistradiomultisimconfig=dsds

endif

DSDA:Dual SIM dual active,即双卡双通;

DSDS:Dual SIM dual standy,即双卡双待;

双卡双通就是可以2个号码同时拨通并可以同时通话的。

双卡双待双通是指一部手机同时接通来自两个通信网络的信号(通过放两张卡)。

如何在Android源码里查找Java中native方法对应的C++实现

在framework下全局搜索这个native方法的全名。一个个查看匹配的文件,应该会找到你需要的。一般命名都有规律,大部分jni方法都在 \frameworks\base\core\jni目录

在Android源码里,有许多方法都是使用Jni机制调用底层的C++实现,比如大家都很熟悉的Binderjava里,就有 public static final native int getCallingPid(); public static final native int getCallingUid(); public static final native long clearCallingIdentity(); 等方法都是直接调用C++里的实现。 通过下面命令可以很快找到对应的实现, build/envsetup cgrep /frameworks '"getCallingPid"' 这时会查找到如下结果: 这样就可以知道对应的C++实现方法名字为android_os_Binder_getCallingPid, 在该文件中找这个方法的实现即可。

android源码只包含android app java的客户端代码。

native部分可能有可能没有,先全局搜索c或者cpp文件,有这些文件才可能有。

如果是标准的android native support 工程,那么eclipse里面打开之后,在工程目录/jni下面就是 native的C++代码。

比如有方法aaabbbCCCddd,JNI对应的名字就是Java_aaa_bbb_CCC_ddd,地图炮搜索就是了,注意不要用全字段匹配,因为JNI名可能还带参数后缀。

另外你的确定你是下的整套Android系统的源码,不是SDK附带的那个源码,那个只有Java的而且还不全。

android源码只包含android app java的客户端代码。

native部分可能有可能没有,先全局搜索c或者cpp文件,有这些文件才可能有。

如果是标准的android native support 工程,那么eclipse里面打开之后,在工程目录/jni下面就是 native的C++代码。

Android源码中很多关键代码都是C++实现的,java通过jni来调用,经常会看到java中这样的代码:

static native Thread currentThread();

如何根据方法名找到其对应的C++实现,有两个方法。

先来个java代码的示例VMThreadjava:

package javalang;

class VMThread {

Thread thread;

int vmData;

VMThread(Thread t) {

thread = t;

}

native static void create(Thread t, long stackSize);

static native Thread currentThread();

static native boolean interrupted();

static native void sleep (long msec, int nsec) throws InterruptedException;

static native void yield();

native void interrupt();

native boolean isInterrupted();

}

我们要查找currentThread方法的实现。

方法一:

由于Android源码中对每个native实现都会写一个java方法名和C++方法名映射的列表,所以我们直接搜索这个列表内容即可。

zkw@zkw $ grep -rns '"currentThread"' /

/art/piler/dex/quick/dex_file_method_inliner:108: "currentThread", kNameCacheCurrentThread

匹配到二进制文件 /dalvik/vm/native/java_lang_VMThreadcppswp

/dalvik/vm/native/java_lang_VMThreadcpp:241: { "currentThread", "()Ljava/lang/Thread;",

/external/android-mock/testsgoogle/android/testing/mocking/AndroidMockGeneratorTestjava:249: Method method = ThreadclassgetMethod("currentThread");

/external/android-mock/testsgoogle/android/testing/mocking/AndroidMockGeneratorTestjava:407: Method method = ThreadclassgetMethod("currentThread");

可以看到,在文件/dalvik/vm/native/java_lang_VMThreadcpp中找到currentThread方法相关的信息,后面()Ljava/lang/Thread代表这个方法的返回值。

进入java_lang_VMThreadcpp这个文件可以看到:

17 /

18 javalangVMThread

19 /

20 #include "Dalvikh"

21 #include "native/InternalNativePrivh"

22

23

24 /

25 static void create(Thread t, long stacksize)

26

27 This is eventually called as a result of Threadstart()

28

29 Throws an exception on failure

30 /

31 static void Dalvik_java_lang_VMThread_create(const u4 args, JValue pResult)

32 {

33 Object threadObj = (Object) args[0];

34 s8 stackSize = GET_ARG_LONG(args, 1);

35

36 / copying collector will pin threadObj for us since it was an argument /

37 dvmCreateInterpThread(threadObj, (int) stackSize);

38 RETURN_VOID();

39 }

40

41 /

42 static Thread currentThread()

43 /

44 static void Dalvik_java_lang_VMThread_currentThread(const u4 args,

45 JValue pResult)

46 {

47 UNUSED_PARAMETER(args);

48

49 RETURN_PTR(dvmThreadSelf()->threadObj);

50 }

51

237

238 const DalvikNativeMethod dvm_java_lang_VMThread[] = {

239 { "create", "(Ljava/lang/Thread;J)V",

240 Dalvik_java_lang_VMThread_create },

241 { "currentThread", "()Ljava/lang/Thread;",

242 Dalvik_java_lang_VMThread_currentThread },

243 { "getStatus", "()I",

244 Dalvik_java_lang_VMThread_getStatus },

245 { "holdsLock", "(Ljava/lang/Object;)Z",

246 Dalvik_java_lang_VMThread_holdsLock },

247 { "interrupt", "()V",

248 Dalvik_java_lang_VMThread_interrupt },

249 { "interrupted", "()Z",

250 Dalvik_java_lang_VMThread_interrupted },

251 { "isInterrupted", "()Z",

252 Dalvik_java_lang_VMThread_isInterrupted },

253 { "nameChanged", "(Ljava/lang/String;)V",

254 Dalvik_java_lang_VMThread_nameChanged },

255 { "setPriority", "(I)V",

256 Dalvik_java_lang_VMThread_setPriority },

257 { "sleep", "(JI)V",

258 Dalvik_java_lang_VMThread_sleep },

259 { "yield", "()V",

260 Dalvik_java_lang_VMThread_yield },

261 { NULL, NULL, NULL },

262 };

源码中第242行找到对应的名字,用红色标出,其实现就在第44行。

这个方法不是很准确,要靠经验来判断搜出来的代码是否是自己要找的,下一个方法可以较准确的查找。

方法二:

还是找VMThreadjava的currentThread函数,找多了会发现,C++的名字一般都是包名+类名+方法名,比如currentThread的C++名字就肯定包含“java_lang_VMThread_currentThread”,所以直接搜索即可。

如何在Android源码里查找Java中native方法对应的C++参考::edu51cto/course/course_id-4377

知道方法名就知道C++里的函数名了,native方法的函数名是 Java_包名_类名_函数名 开头的,包名要把换成_。比如xxxyyyClassAmethodB在C++那边找Java__xxx_yyy_ClassA_methodB就行了

如何在eclipse中查看android源码

假设我们想参看Activity类的源代码,按着Ctrl键,左击它,现实的结果却看不到代码的,提示的信息便是“找不到Activityclass文件”。

此时点击下面的按钮,“Change Attached Source…”,选择android源代码所在位置,便d出对话框。

第一种是选择工作目录,即已经存在的android应用程序源代码。

第二种分两种方式

(1)选择External File…按钮,添加Jar格式文件或者zip格式文件路径;

(2)选择External Floder…按钮,添加文件夹所在路径。

下面问题就来了,源代码在哪里?不能凭空产生阿。

可以通过Android SDK Manager进行源代码下载;(推荐该种方法),勾选Source for Android SDK,进行下载即可。

此外也可通过其他途径下载,网上有很多共享的资源。

这里选择第二种方式的(2)方法,选择源码所在目录(即下载源代码目录所在路径)

点击“OK”按钮,此时,Activity文件便能够查看源代码了

Androidmk添加第三方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-2814jar \

jackson-mapper:lib/jackson-mapper-asl-162jar \

logging:lib/commons-loggingjar \

jackson-core:lib/jackson-core-asl-162jar \

javatar:lib/javatar-25jar \

log4j:lib/log4j-1215jar

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-212jar。

需要注意的是,当你要引用的jar包不止一个时,有两个关键的地方需要注意的。

LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2814jar \

jackson-mapper:lib/jackson-mapper-asl-162jar \

logging:lib/commons-loggingjar \

jackson-core:lib/jackson-core-asl-162jar \

javatar:lib/javatar-25jar \

log4j:lib/log4j-1215jar

xsocket jackson-mapper logging jackson-core javatar log4j这几个只是名字,可以随便取。LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES后面才是真正其作用的地方。如:

xsocket:lib/xSocket-2814jar 引用的是lib目录中的xSocket-2814jar。

还要注意的是 := 不要写成了+=了哦。

附:编写各种类型的Androidmk,出处我忘记了,是以前浏览是拷贝下来的。

一、编译一个简单的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)

# Module name should match apk name to be installed

LOCAL_MODULE := LocalModuleName

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 := baiduinput_android_v11_1000e

LOCAL_SRC_FILES := $(LOCAL_MODULE)apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_CERTIFICATE := platform

include $(BUILD_PREBUILT)

#################################################################

####### copy the library to /system/lib #########################

#################################################################

include $(CLEAR_VARS)

LOCAL_MODULE := libinputcoreso

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 := androidtestrunner

# 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文件名。

以上就是关于android studio 外部依赖库 能修改源码吗全部的内容,包括:android studio 外部依赖库 能修改源码吗、android sdk源码中怎么没有httpclient的源码了、关于修改高通8976android8版本源码的双卡单卡的设置方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/8843106.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-22
下一篇2023-04-22

发表评论

登录后才能评论

评论列表(0条)

    保存